*
* The gory details, listed by topic:
*
- * - Audio format handlers: \ref mp3_afh.c, \ref ogg_afh.c \ref aac_afh.c,
- * - Decoders: \ref mp3dec.c, \ref \ref oggdec.c, \ref aacdec.c,
+ * - Audio format handlers: \ref mp3_afh.c, \ref ogg_afh.c, \ref aac_afh.c,
+ * - Decoders: \ref mp3dec.c, \ref oggdec.c, \ref aacdec.c,
* - Volume normalizer: \ref compress.c,
* - Output: \ref alsa_write.c, \ref osx_write.c,
* - http: \ref http_recv.c, \ref http_send.c,
* - dccp: \ref dccp_recv.c, \ref dccp_send.c,
* - Audio file selector: \ref afs.c, \ref aft.c, \ref mood.c,
* - Afs structures: \ref afs_table, \ref audio_file_data,
- * \ref afs_info \ref audio_format_info,
+ * \ref afs_info \ref afh_info,
* - Afs tables: \ref aft.c, \ref mood.c, \ref playlist.c,
* \ref attribute.c, \ref score.c,
* - The virtual streaming system: \ref vss.c, \ref chunk_queue.c.
mmd->events = 0;
mmd->num_connects = 0;
mmd->active_connections = 0;
- strcpy(mmd->afd.path, "(none)");
mmd->vss_status_flags = VSS_NEXT;
mmd->new_vss_status_flags = VSS_NEXT;
mmd->sender_cmd_data.cmd_num = -1;
int ret = 0;
signal_pipe = para_signal_init();
- PARA_NOTICE_LOG("%s", "setting up signal handlers\n");
+
+ PARA_NOTICE_LOG("setting up signal handlers\n");
ret += para_install_sighandler(SIGINT);
ret += para_install_sighandler(SIGTERM);
ret += para_install_sighandler(SIGHUP);
PARA_EMERG_LOG("%s", "could not install signal handlers\n");
exit(EXIT_FAILURE);
}
+ add_close_on_fork_list(signal_pipe);
}
static unsigned init_network(void)
ret = mark_fd_nonblock(fd);
if (ret < 0)
goto err;
+ add_close_on_fork_list(fd); /* child doesn't need the listener */
return fd;
err:
PARA_EMERG_LOG("%s\n", PARA_STRERROR(-ret));
}
alarm(ALARM_TIMEOUT);
close_listed_fds();
- close(sockfd); /* child doesn't need the listener */
+ para_signal_shutdown();
/*
* put info on who we are serving into argv[0] to make
* client ip visible in top/ps