If sheep terminates during a logging operation, the sheep logger cannot get semaphore any more and cannot exit in log_sigsegv(). To resolve the problem, this patch sets SEM_UNDO for semget(). Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp> --- lib/logger.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/logger.c b/lib/logger.c index 565a397..146b83a 100644 --- a/lib/logger.c +++ b/lib/logger.c @@ -293,7 +293,7 @@ static void dolog(int prio, const char *func, int line, const char *fmt, va_list ts.tv_nsec = 10000; ops.sem_num = 0; - ops.sem_flg = 0; + ops.sem_flg = SEM_UNDO; ops.sem_op = -1; if (semop(la->semid, &ops, 1) < 0) { syslog(LOG_ERR, "semop up failed %m"); @@ -344,7 +344,7 @@ static void log_flush(void) while (!la->empty) { ops.sem_num = 0; - ops.sem_flg = 0; + ops.sem_flg = SEM_UNDO; ops.sem_op = -1; if (semop(la->semid, &ops, 1) < 0) { syslog(LOG_ERR, "semop up failed"); -- 1.7.2.5 |