void log_safe (int prio, const char * fmt, va_list ap) { if (log_thr == (pthread_t)0) { vsyslog(prio, fmt, ap); return; } pthread_mutex_lock(&logq_lock); log_enqueue(prio, fmt, ap); pthread_mutex_unlock(&logq_lock); pthread_mutex_lock(&logev_lock); pthread_cond_signal(&logev_cond); pthread_mutex_unlock(&logev_lock); }
static void dolog(int prio, const char *fmt, va_list ap) { if (is_daemon) { la->ops[0].sem_op = -1; if (semop(la->semid, la->ops, 1) < 0) { syslog(LOG_ERR, "semop up failed"); return; } log_enqueue(prio, fmt, ap); la->ops[0].sem_op = 1; if (semop(la->semid, la->ops, 1) < 0) { syslog(LOG_ERR, "semop down failed"); return; } } else { fprintf(stderr, "%s: ", log_name); vfprintf(stderr, fmt, ap); fflush(stderr); } }