join signal handler on exit. make sure it exits okay

This commit is contained in:
Ron Pedde 2004-11-14 06:44:20 +00:00
parent 8bdd650ed2
commit 06b5ad046f

View File

@ -119,7 +119,7 @@ static int daemon_start(void);
static void write_pid_file(void); static void write_pid_file(void);
static void usage(char *program); static void usage(char *program);
static void *signal_handler(void *arg); static void *signal_handler(void *arg);
static int start_signal_handler(void); static int start_signal_handler(pthread_t *handler_tid);
static void daap_handler(WS_CONNINFO *pwsc); static void daap_handler(WS_CONNINFO *pwsc);
static int daap_auth(char *username, char *password); static int daap_auth(char *username, char *password);
@ -613,7 +613,7 @@ void *signal_handler(void *arg) {
break; break;
} }
} }
} }
return NULL; return NULL;
} }
@ -623,12 +623,11 @@ void *signal_handler(void *arg) {
* signal handler started by spawning a new thread on * signal handler started by spawning a new thread on
* signal_handler(). * signal_handler().
* *
* \returns 0 on success, -1 with errno set otherwise * \returns 0 on success, -1 on failure with errno set
*/ */
int start_signal_handler(void) { int start_signal_handler(pthread_t *handler_tid) {
int error; int error;
sigset_t set; sigset_t set;
pthread_t handler_tid;
if((sigemptyset(&set) == -1) || if((sigemptyset(&set) == -1) ||
(sigaddset(&set,SIGINT) == -1) || (sigaddset(&set,SIGINT) == -1) ||
@ -639,13 +638,14 @@ int start_signal_handler(void) {
return -1; return -1;
} }
if(error=pthread_create(&handler_tid, NULL, signal_handler, NULL)) { if(error=pthread_create(handler_tid, NULL, signal_handler, NULL)) {
errno=error; errno=error;
DPRINTF(E_LOG,L_MAIN,"Error creating signal_handler thread\n"); DPRINTF(E_LOG,L_MAIN,"Error creating signal_handler thread\n");
return -1; return -1;
} }
pthread_detach(handler_tid); /* we'll not detach this... let's join it */
//pthread_detach(handler_tid);
return 0; return 0;
} }
@ -679,6 +679,7 @@ int main(int argc, char *argv[]) {
int end_time; int end_time;
int rescan_counter=0; int rescan_counter=0;
int old_song_count; int old_song_count;
pthread_t signal_tid;
config.use_mdns=1; config.use_mdns=1;
err_debuglevel=1; err_debuglevel=1;
@ -772,7 +773,7 @@ int main(int argc, char *argv[]) {
/* block signals and set up the signal handling thread */ /* block signals and set up the signal handling thread */
DPRINTF(E_LOG,L_MAIN,"Starting signal handler\n"); DPRINTF(E_LOG,L_MAIN,"Starting signal handler\n");
if(start_signal_handler()) { if(start_signal_handler(&signal_tid)) {
DPRINTF(E_FATAL,L_MAIN,"Error starting signal handler %s\n",strerror(errno)); DPRINTF(E_FATAL,L_MAIN,"Error starting signal handler %s\n",strerror(errno));
} }
@ -873,6 +874,12 @@ int main(int argc, char *argv[]) {
} }
#endif #endif
DPRINTF(E_LOG,L_MAIN,"Stopping signal handler\n");
if(!pthread_kill(signal_tid,SIGINT)) {
pthread_join(signal_tid,NULL);
}
DPRINTF(E_LOG,L_MAIN|L_WS,"Stopping web server\n"); DPRINTF(E_LOG,L_MAIN|L_WS,"Stopping web server\n");
ws_stop(server); ws_stop(server);