inotify: Block signals in the inotify thread.

Otherwise, we may get invalid reads due to double-handling of signals.
This commit is contained in:
Justin Maggard 2015-12-21 11:43:38 -08:00
parent d097d3c02d
commit c985eee9c7
3 changed files with 10 additions and 6 deletions

View File

@ -641,7 +641,7 @@ inotify_remove_directory(int fd, const char * path)
}
void *
start_inotify()
start_inotify(void)
{
struct pollfd pollfds[1];
int timeout = 1000;
@ -650,6 +650,10 @@ start_inotify()
int length, i = 0;
char * esc_name = NULL;
struct stat st;
sigset_t set;
sigfillset(&set);
pthread_sigmask(SIG_BLOCK, &set, NULL);
pollfds[0].fd = inotify_init();
pollfds[0].events = POLLIN;

View File

@ -1299,10 +1299,6 @@ shutdown:
if (scanning && scanner_pid)
kill(scanner_pid, SIGKILL);
/* kill other child processes */
process_reap_children();
free(children);
/* close out open sockets */
while (upnphttphead.lh_first != NULL)
{
@ -1330,6 +1326,10 @@ shutdown:
if (inotify_thread)
pthread_join(inotify_thread, NULL);
/* kill other child processes */
process_reap_children();
free(children);
sql_exec(db, "UPDATE SETTINGS set VALUE = '%u' where KEY = 'UPDATE_ID'", updateID);
sqlite3_close(db);

View File

@ -96,10 +96,10 @@ process_fork(struct client_cache_s *client)
pid_t pid = fork();
if (pid > 0)
{
number_of_children++;
if (client)
client->connections++;
add_process_info(pid, client);
number_of_children++;
}
return pid;