Browse Source

Fix thread locking so it works
-Erik

Eric Andersen 22 years ago
parent
commit
adbc99596b
1 changed files with 20 additions and 45 deletions
  1. 20 45
      libc/misc/syslog/syslog.c

+ 20 - 45
libc/misc/syslog/syslog.c

@@ -65,10 +65,6 @@
 #include <sys/file.h>
 #include <sys/signal.h>
 #include <sys/syslog.h>
-#if 0
-#include "syslog.h"
-#include "pathnames.h"
-#endif
 
 #include <sys/uio.h>
 #include <sys/wait.h>
@@ -84,36 +80,15 @@
 #include <signal.h>
 
 
-#if defined(_REENTRENT) || defined(_THREAD_SAFE)
-# include <pthread.h>
-
-extern int __writev( int, const struct iovec *, size_t);
-
-/* We need to initialize the mutex.  For this we use a method provided
-   by pthread function 'pthread_once'.  For this we need a once block.  */
-static pthread_once__t _once_block = pthread_once_init;
-
-/* This is the mutex which protects the global environment of simultaneous
-   modifications.  */
-static pthread_mutex_t _syslog_mutex;
-
-static void
-DEFUN_VOID(_init_syslog_mutex)
-{
-  pthread_mutex_init(&_syslog_mutex, pthread_mutexattr_default);
-}
-
-# define LOCK() \
-   do { pthread_once(&_once_block, _init_syslog_mutex);
-        pthread_mutex_lock(&_syslog_mutex); } while (0)
-# define UNLOCK() pthread_mutex_unlock(&_syslog_mutex)
-
-#else /* !_REENTRENT && !_THREAD_SAFE */
-
-# define LOCK()
-# define UNLOCK()
-
-#endif /* _REENTRENT || _THREAD_SAFE */
+#ifdef __UCLIBC_HAS_THREADS__
+#include <pthread.h>
+static pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER;
+# define LOCK	pthread_mutex_lock(&mylock)
+# define UNLOCK	pthread_mutex_unlock(&mylock);
+#else
+# define LOCK
+# define UNLOCK
+#endif
 
 
 static int	LogFile = -1;		/* fd for log */
@@ -122,6 +97,7 @@ static int	LogStat = 0;		/* status bits, set by openlog() */
 static const char *LogTag = "syslog";	/* string to tag the entry with */
 static int	LogFacility = LOG_USER;	/* default facility code */
 static int	LogMask = 0xff;		/* mask of priorities to be logged */
+static struct sockaddr SyslogAddr;	/* AF_UNIX address of local logger */
 
 static void closelog_intern( int );
 void syslog( int, const char *, ...);
@@ -133,7 +109,7 @@ int setlogmask(int pmask);
 static void 
 closelog_intern(int to_default)
 {
-	LOCK();
+	LOCK;
 	(void) close(LogFile);
 	LogFile = -1;
 	connected = 0;
@@ -144,7 +120,7 @@ closelog_intern(int to_default)
 		LogFacility = LOG_USER;
 		LogMask = 0xff;
 	}
-	UNLOCK();
+	UNLOCK;
 }
 
 static void
@@ -186,7 +162,7 @@ vsyslog( int pri, const char *fmt, va_list ap )
 
 	saved_errno = errno;
 
-	LOCK();
+	LOCK;
 
 	/* See if we should just throw out this message. */
 	if (!(LogMask & LOG_MASK(LOG_PRI(pri))) || (pri &~ (LOG_PRIMASK|LOG_FACMASK)))
@@ -227,7 +203,7 @@ vsyslog( int pri, const char *fmt, va_list ap )
 	__set_errno(saved_errno);
 	p += vsnprintf(p, end - p, fmt, ap);
 	if (p >= end || p < head_end) {	/* Returned -1 in case of error... */
-		static char truncate_msg[12] = "[truncated] ";
+		static const char truncate_msg[12] = "[truncated] ";
 		memmove(head_end + sizeof(truncate_msg), head_end,
 			end - head_end - sizeof(truncate_msg));
 		memcpy(head_end, truncate_msg, sizeof(truncate_msg));
@@ -275,20 +251,19 @@ vsyslog( int pri, const char *fmt, va_list ap )
 	}
 
 getout:
-	UNLOCK();
+	UNLOCK;
 	if (sigpipe == 0)
 		sigaction (SIGPIPE, &oldaction,
 			(struct sigaction *) NULL);
 }
 
-static struct sockaddr SyslogAddr;	/* AF_UNIX address of local logger */
 /*
  * OPENLOG -- open system log
  */
 void
 openlog( const char *ident, int logstat, int logfac )
 {
-        LOCK();
+        LOCK;
 
 	if (ident != NULL)
 		LogTag = ident;
@@ -301,7 +276,7 @@ openlog( const char *ident, int logstat, int logfac )
 		    sizeof(SyslogAddr.sa_data));
 		if (LogStat & LOG_NDELAY) {
 		        if ((LogFile = socket(AF_UNIX, SOCK_STREAM, 0)) == -1){
-			        UNLOCK();
+			        UNLOCK;
 				return;
 			}
 /*			fcntl(LogFile, F_SETFD, 1); */
@@ -318,7 +293,7 @@ openlog( const char *ident, int logstat, int logfac )
 #endif
 		connected = 1;
 
-        UNLOCK();
+        UNLOCK;
 }
 
 /*
@@ -336,10 +311,10 @@ int setlogmask(int pmask)
     int omask;
 
     omask = LogMask;
-    LOCK();
+    LOCK;
     if (pmask != 0)
 	LogMask = pmask;
-    UNLOCK();
+    UNLOCK;
     return (omask);
 }