[PATCH 10/11] syslog: Use self-contained recursive mutex

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Feb 6 15:51:28 UTC 2018


Update #2843.
---
 cpukit/libnetworking/lib/syslog.c | 30 ++++++------------------------
 1 file changed, 6 insertions(+), 24 deletions(-)

diff --git a/cpukit/libnetworking/lib/syslog.c b/cpukit/libnetworking/lib/syslog.c
index 066d7ab0e4..8f0cbc8885 100644
--- a/cpukit/libnetworking/lib/syslog.c
+++ b/cpukit/libnetworking/lib/syslog.c
@@ -7,6 +7,7 @@
 #endif
 
 #include <rtems.h>
+#include <rtems/thread.h>
 #include <stdio.h>
 #include <stdarg.h>
 #include <errno.h>
@@ -24,7 +25,8 @@ static int LogFacility = LOG_USER;
 static int LogMask = 0xff;
 
 static int LogFd = -1;
-static rtems_id LogSemaphore;
+static rtems_recursive_mutex LogSemaphore =
+  RTEMS_RECURSIVE_MUTEX_INITIALIZER("syslog");
 extern struct in_addr rtems_bsdnet_log_host_address;
 
 #define SYSLOG_PORT	514
@@ -89,8 +91,7 @@ vsyslog (int pri, const char *fmt, va_list ap)
 	 */
 	sent = 0;
 	if ((rtems_bsdnet_log_host_address.s_addr != INADDR_ANY)
-	 && (LogFd >= 0)
-	 && (rtems_semaphore_obtain (LogSemaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT) == RTEMS_SUCCESSFUL)) {
+	 && (LogFd >= 0)) {
 		/*
 		 * Set the destination address/port
 		 */
@@ -100,12 +101,13 @@ vsyslog (int pri, const char *fmt, va_list ap)
 		farAddress.sin_addr = rtems_bsdnet_log_host_address;
 		memset (farAddress.sin_zero, '\0', sizeof farAddress.sin_zero);
 
+		rtems_recursive_mutex_lock (&LogSemaphore);
 		/*
 		 * Send the message
 		 */
 		if (sendto (LogFd, cbuf, cnt, 0, (struct sockaddr *)&farAddress, sizeof farAddress) >= 0)
 			sent = 1;
-		rtems_semaphore_release (LogSemaphore);
+		rtems_recursive_mutex_unlock (&LogSemaphore);
 	}
 	if (!sent && (LogStatus & LOG_CONS) && !(LogStatus & LOG_PERROR))
 		printf ("%s\n", msgp);
@@ -114,7 +116,6 @@ vsyslog (int pri, const char *fmt, va_list ap)
 void
 openlog (const char *ident, int logstat, int logfac)
 {
-	rtems_status_code sc;
 	struct sockaddr_in myAddress;
 
 	if (ident != NULL)
@@ -144,24 +145,6 @@ openlog (const char *ident, int logstat, int logfac)
 		printf ("Can't bind syslog socket: %d\n", errno);
 		return;
 	}
-
-	/*
-	 * Create the mutex
-	 */
-	sc = rtems_semaphore_create (rtems_build_name('s', 'L', 'o', 'g'),
-					1,
-					RTEMS_PRIORITY |
-						RTEMS_BINARY_SEMAPHORE |
-						RTEMS_INHERIT_PRIORITY |
-						RTEMS_NO_PRIORITY_CEILING |
-						RTEMS_LOCAL,
-					0,
-					&LogSemaphore);
-	if (sc != RTEMS_SUCCESSFUL) {
-		printf ("Can't create syslog semaphore: %d\n", sc);
-		close (LogFd);
-		LogFd = -1;
-	}
 }
 
 void
@@ -170,7 +153,6 @@ closelog(void)
 	if (LogFd >= 0) {
 		close (LogFd);
 		LogFd = -1;
-		rtems_semaphore_delete (LogSemaphore);
 	}
 }
 
-- 
2.12.3




More information about the devel mailing list