mirror of
https://github.com/fluencelabs/musl
synced 2025-06-03 10:01:38 +00:00
fix syslog (corrected SIGPIPE blocking, and using dgram instead of stream)
it actually appears the hacks to block SIGPIPE are probably not necessary, and potentially harmful. if i can confirm this, i'll remove them.
This commit is contained in:
parent
07e865cc5a
commit
a444ee3410
@ -49,7 +49,7 @@ static void __openlog(const char *ident, int opt, int facility)
|
||||
|
||||
if (!(opt & LOG_NDELAY) || log_f) return;
|
||||
|
||||
fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||
fd = socket(AF_UNIX, SOCK_DGRAM, 0);
|
||||
fcntl(fd, F_SETFD, FD_CLOEXEC);
|
||||
if (connect(fd, (void *)&log_addr, sizeof(short) + sizeof "/dev/log") < 0)
|
||||
close(fd);
|
||||
@ -65,7 +65,7 @@ void openlog(const char *ident, int opt, int facility)
|
||||
|
||||
void syslog(int priority, const char *message, ...)
|
||||
{
|
||||
struct sigaction sa;
|
||||
sigset_t set, oldset;
|
||||
va_list ap;
|
||||
char timebuf[16];
|
||||
time_t now;
|
||||
@ -83,13 +83,9 @@ void syslog(int priority, const char *message, ...)
|
||||
return;
|
||||
}
|
||||
|
||||
memset(&sa, 0, sizeof sa);
|
||||
sa.sa_handler = SIG_IGN;
|
||||
if (sigaction(SIGPIPE, &sa, &sa) < 0) {
|
||||
// we must abandon logging or we might cause SIGPIPE
|
||||
UNLOCK(&lock);
|
||||
return;
|
||||
}
|
||||
sigemptyset(&set);
|
||||
sigaddset(&set, SIGPIPE);
|
||||
pthread_sigmask(SIG_BLOCK, &set, &oldset);
|
||||
|
||||
now = time(NULL);
|
||||
gmtime_r(&now, &tm);
|
||||
@ -109,7 +105,9 @@ void syslog(int priority, const char *message, ...)
|
||||
// Note: LOG_CONS is not supported because it is annoying!!
|
||||
// syslogd will send messages to console if it deems them appropriate!
|
||||
|
||||
sigaction(SIGPIPE, &sa, NULL);
|
||||
/* Clear any possible SIGPIPE generated by the socket write. */
|
||||
sigtimedwait(&set, 0, (struct timespec [1]){0}) || (perror("x"),1);
|
||||
pthread_sigmask(SIG_SETMASK, &oldset, 0);
|
||||
|
||||
UNLOCK(&lock);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user