Browse Source

[Minor] Postpone log closing unless we have opened a new one

pull/3225/head
Vsevolod Stakhov 6 years ago
parent
commit
72fbcb3056
  1. 45
      src/libutil/logger.c

45
src/libutil/logger.c

@ -303,11 +303,28 @@ rspamd_try_open_log_fd (rspamd_logger_t *rspamd_log, uid_t uid, gid_t gid)
gint
rspamd_log_open_priv (rspamd_logger_t *rspamd_log, uid_t uid, gid_t gid)
{
gint nfd;
if (!rspamd_log->opened) {
switch (rspamd_log->log_type) {
case RSPAMD_LOG_CONSOLE:
/* Dup stderr fd to simplify processing */
rspamd_log->fd = dup (STDERR_FILENO);
nfd = dup (STDERR_FILENO);
if (nfd == -1) {
return -1;
}
if (rspamd_log->fd != -1) {
/*
* Postponed closing (e.g. when we switch from
* LOG_FILE to LOG_CONSOLE)
*/
close (rspamd_log->fd);
}
rspamd_log->fd = nfd;
if (isatty (STDERR_FILENO)) {
rspamd_log->flags |= RSPAMD_LOG_FLAG_TTY;
}
@ -320,12 +337,21 @@ rspamd_log_open_priv (rspamd_logger_t *rspamd_log, uid_t uid, gid_t gid)
#endif
break;
case RSPAMD_LOG_FILE:
rspamd_log->fd = rspamd_try_open_log_fd (rspamd_log, uid, gid);
nfd = rspamd_try_open_log_fd (rspamd_log, uid, gid);
if (rspamd_log->fd == -1) {
if (nfd == -1) {
return -1;
}
if (rspamd_log->fd != -1) {
/*
* Postponed closing (e.g. when we switch from
* LOG_CONSOLE to LOG_FILE)
*/
close (rspamd_log->fd);
}
rspamd_log->fd = nfd;
rspamd_log->no_lock = TRUE;
break;
default:
@ -405,12 +431,18 @@ rspamd_log_close_priv (rspamd_logger_t *rspamd_log, gboolean termination, uid_t
}
#endif
close (rspamd_log->fd);
rspamd_log->fd = -1;
}
break;
case RSPAMD_LOG_CONSOLE:
if (rspamd_log->fd != -1) {
close (rspamd_log->fd);
}
/*
* Console logging is special: it is usually a last resort when
* we have errors or something like that.
*
* Hence, we need to postpone it's closing to the moment
* when we open (in a reliable matter!) a new logging
* facility.
*/
break;
}
@ -496,6 +528,7 @@ rspamd_set_logger (struct rspamd_config *cfg,
if (plogger == NULL || *plogger == NULL) {
logger = g_malloc0 (sizeof (rspamd_logger_t));
logger->fd = -1;
if (cfg->log_error_elts > 0 && pool) {
logger->errlog = rspamd_mempool_alloc0_shared (pool,

Loading…
Cancel
Save