reopen log and re-read config on sighup -- fixes ticket #73

This commit is contained in:
Ron Pedde 2006-04-15 23:03:31 +00:00
parent 7907540aa5
commit 882111a52a
5 changed files with 49 additions and 1 deletions

View File

@ -361,6 +361,14 @@ int _conf_verify(LL_HANDLE pll) {
return is_valid; return is_valid;
} }
/**
* reload the existing config file.
*
* @returns CONF_E_SUCCESS on success
*/
int conf_reload(void) {
return conf_read(conf_main_file);
}
/** /**
* read a configfile into a tree * read a configfile into a tree

View File

@ -33,6 +33,7 @@
#define CONF_E_NOTWRITABLE 8 #define CONF_E_NOTWRITABLE 8
extern int conf_read(char *file); extern int conf_read(char *file);
extern int conf_reload(void);
extern int conf_close(void); extern int conf_close(void);
extern int conf_get_int(char *section, char *key, int dflt); extern int conf_get_int(char *section, char *key, int dflt);
extern int conf_get_string(char *section, char *key, char *dflt, extern int conf_get_string(char *section, char *key, char *dflt,

View File

@ -36,6 +36,7 @@
#include <stdarg.h> #include <stdarg.h>
#include <time.h> #include <time.h>
#include <errno.h> #include <errno.h>
#include <limits.h>
#include <pthread.h> #include <pthread.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@ -45,8 +46,13 @@
# include "os.h" # include "os.h"
#endif #endif
#ifndef PACKAGE
# define PACKAGE "unknown daemon"
#endif
static int err_debuglevel=0; /**< current debuglevel, set from command line with -d */ static int err_debuglevel=0; /**< current debuglevel, set from command line with -d */
static int err_logdestination=LOGDEST_STDERR; /**< current log destination */ static int err_logdestination=LOGDEST_STDERR; /**< current log destination */
static char err_filename[PATH_MAX + 1];
static FILE *err_file=NULL; /**< if logging to file, the handle of that file */ static FILE *err_file=NULL; /**< if logging to file, the handle of that file */
static pthread_mutex_t err_mutex=PTHREAD_MUTEX_INITIALIZER; /**< for serializing log messages */ static pthread_mutex_t err_mutex=PTHREAD_MUTEX_INITIALIZER; /**< for serializing log messages */
static unsigned int err_debugmask=0xFFFFFFFF; /**< modules to debug, see \ref log_categories */ static unsigned int err_debugmask=0xFFFFFFFF; /**< modules to debug, see \ref log_categories */
@ -64,6 +70,32 @@ static char *err_categorylist[] = {
static int _err_lock(void); static int _err_lock(void);
static int _err_unlock(void); static int _err_unlock(void);
/**
* if we are logging to a file, then re-open the file. This
* would help for log rotation
*/
void err_reopen(void) {
int err;
if(err_logdestination != LOGDEST_LOGFILE)
return;
fclose(err_file);
err_file = fopen(err_filename,"a");
if(!err_file) {
/* what to do when you lose your logging mechanism? Keep
* going?
*/
err = errno;
err_setdest(PACKAGE,LOGDEST_SYSLOG);
DPRINTF(E_LOG,L_MISC,"Could not rotate log file: %s\n",
strerror(err));
} else {
DPRINTF(E_LOG,L_MISC,"Rotated logs\n");
}
}
/** /**
* Write a printf-style formatted message to the log destination. * Write a printf-style formatted message to the log destination.
* This can be stderr, syslog/eventviewer, or a logfile, as determined by * This can be stderr, syslog/eventviewer, or a logfile, as determined by
@ -160,7 +192,8 @@ void err_setdest(char *cvalue, int destination) {
switch(destination) { switch(destination) {
case LOGDEST_LOGFILE: case LOGDEST_LOGFILE:
err_file=fopen(cvalue,"a"); strncpy(err_filename,cvalue,PATH_MAX);
err_file=fopen(err_filename,"a");
if(err_file==NULL) { if(err_file==NULL) {
fprintf(stderr,"Error opening %s: %s\n",cvalue,strerror(errno)); fprintf(stderr,"Error opening %s: %s\n",cvalue,strerror(errno));
exit(EXIT_FAILURE); exit(EXIT_FAILURE);

View File

@ -64,6 +64,7 @@
#endif #endif
extern void err_log(int level, unsigned int cat, char *fmt, ...); extern void err_log(int level, unsigned int cat, char *fmt, ...);
extern void err_reopen(void); /** rotate logfile */
extern void err_setdest(char *cvalue, int destination); extern void err_setdest(char *cvalue, int destination);
extern void err_setlevel(int level); extern void err_setlevel(int level);
extern int err_getlevel(void); extern int err_getlevel(void);

View File

@ -363,6 +363,11 @@ void *_os_signal_handler(void *arg) {
break; break;
case SIGHUP: case SIGHUP:
DPRINTF(E_LOG,L_MAIN,"Got HUP signal. Notifying daap server.\n"); DPRINTF(E_LOG,L_MAIN,"Got HUP signal. Notifying daap server.\n");
/* if we can't reload, it keeps the old config file,
* so no real damage */
conf_reload();
err_reopen();
config.reload=1; config.reload=1;
break; break;
default: default: