Commit dc22846d authored by Max Kellermann's avatar Max Kellermann

log: store duplicated path string

Don't free the string right after calling log_init_file(). Add a new function log_deinit() that frees the string on shutdown. This fixes cycling the log file after SIGHUP (Mantis ticket 0003524).
parent c9aaabb5
...@@ -55,7 +55,7 @@ static const char *log_charset; ...@@ -55,7 +55,7 @@ static const char *log_charset;
static bool stdout_mode = true; static bool stdout_mode = true;
static int out_fd; static int out_fd;
static const char *out_filename; static char *out_filename;
static void redirect_logs(int fd) static void redirect_logs(int fd)
{ {
...@@ -134,14 +134,15 @@ open_log_file(void) ...@@ -134,14 +134,15 @@ open_log_file(void)
} }
static bool static bool
log_init_file(const char *path, unsigned line, GError **error_r) log_init_file(unsigned line, GError **error_r)
{ {
out_filename = path; assert(out_filename != NULL);
out_fd = open_log_file(); out_fd = open_log_file();
if (out_fd < 0) { if (out_fd < 0) {
g_set_error(error_r, log_quark(), errno, g_set_error(error_r, log_quark(), errno,
"failed to open log file \"%s\" (config line %u): %s", "failed to open log file \"%s\" (config line %u): %s",
path, line, g_strerror(errno)); out_filename, line, g_strerror(errno));
return false; return false;
} }
...@@ -271,22 +272,33 @@ log_init(bool verbose, bool use_stdout, GError **error_r) ...@@ -271,22 +272,33 @@ log_init(bool verbose, bool use_stdout, GError **error_r)
return true; return true;
#endif #endif
} else { } else {
GError *error = NULL; out_filename = config_dup_path(CONF_LOG_FILE, error_r);
char *path = config_dup_path(CONF_LOG_FILE, &error); return out_filename != NULL &&
if (path == NULL) { log_init_file(param->line, error_r);
assert(error != NULL);
g_propagate_error(error_r, error);
return false;
}
bool success = log_init_file(path, param->line,
error_r);
g_free(path);
return success;
} }
} }
} }
static void
close_log_files(void)
{
if (stdout_mode)
return;
#ifdef HAVE_SYSLOG
if (out_filename == NULL)
closelog();
#endif
}
void
log_deinit(void)
{
close_log_files();
g_free(out_filename);
}
void setup_log_output(bool use_stdout) void setup_log_output(bool use_stdout)
{ {
fflush(NULL); fflush(NULL);
...@@ -327,15 +339,3 @@ int cycle_log_files(void) ...@@ -327,15 +339,3 @@ int cycle_log_files(void)
g_debug("Done cycling log files\n"); g_debug("Done cycling log files\n");
return 0; return 0;
} }
void close_log_files(void)
{
if (stdout_mode)
return;
#ifdef HAVE_SYSLOG
if (out_filename == NULL)
closelog();
#endif
}
...@@ -44,10 +44,11 @@ log_early_init(bool verbose); ...@@ -44,10 +44,11 @@ log_early_init(bool verbose);
bool bool
log_init(bool verbose, bool use_stdout, GError **error_r); log_init(bool verbose, bool use_stdout, GError **error_r);
void
log_deinit(void);
void setup_log_output(bool use_stdout); void setup_log_output(bool use_stdout);
int cycle_log_files(void); int cycle_log_files(void);
void close_log_files(void);
#endif /* LOG_H */ #endif /* LOG_H */
...@@ -536,6 +536,6 @@ int mpd_main(int argc, char *argv[]) ...@@ -536,6 +536,6 @@ int mpd_main(int argc, char *argv[])
WSACleanup(); WSACleanup();
#endif #endif
close_log_files(); log_deinit();
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment