diff options
| -rw-r--r-- | src/misc/syslog.c | 24 | 
1 files changed, 19 insertions, 5 deletions
diff --git a/src/misc/syslog.c b/src/misc/syslog.c index 0f757640..cbe65209 100644 --- a/src/misc/syslog.c +++ b/src/misc/syslog.c @@ -7,6 +7,7 @@  #include <time.h>  #include <signal.h>  #include <string.h> +#include <pthread.h>  #include "libc.h"  static int lock; @@ -33,10 +34,13 @@ static const struct {  void closelog(void)  { +	int cs; +	pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);  	LOCK(&lock);  	close(log_fd);  	log_fd = -1;  	UNLOCK(&lock); +	pthread_setcancelstate(cs, 0);  }  static void __openlog(const char *ident, int opt, int facility) @@ -53,12 +57,15 @@ static void __openlog(const char *ident, int opt, int facility)  void openlog(const char *ident, int opt, int facility)  { +	int cs; +	pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);  	LOCK(&lock);  	__openlog(ident, opt, facility);  	UNLOCK(&lock); +	pthread_setcancelstate(cs, 0);  } -void __vsyslog(int priority, const char *message, va_list ap) +static void _vsyslog(int priority, const char *message, va_list ap)  {  	char timebuf[16];  	time_t now; @@ -67,10 +74,6 @@ void __vsyslog(int priority, const char *message, va_list ap)  	int pid;  	int l, l2; -	if (!(log_mask & LOG_MASK(priority&7)) || (priority&~0x3ff)) return; - -	LOCK(&lock); -  	if (log_fd < 0) {  		__openlog(log_ident, log_opt | LOG_NDELAY, log_facility);  		if (log_fd < 0) { @@ -98,6 +101,17 @@ void __vsyslog(int priority, const char *message, va_list ap)  	UNLOCK(&lock);  } +void __vsyslog(int priority, const char *message, va_list ap) +{ +	int cs; +	if (!(log_mask & LOG_MASK(priority&7)) || (priority&~0x3ff)) return; +	pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs); +	LOCK(&lock); +	_vsyslog(priority, message, ap); +	UNLOCK(&lock); +	pthread_setcancelstate(cs, 0); +} +  void syslog(int priority, const char *message, ...)  {  	va_list ap;  | 
