diff options
author | Eric Wong <normalperson@yhbt.net> | 2013-01-31 03:52:20 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2013-01-31 03:55:28 +0000 |
commit | d68b0ad231192c6ccf701e66be66b6bc956bed2b (patch) | |
tree | 775e98e71517fb889b09293034c2877c712b6832 | |
parent | 088138b235e79fa54a4e3602a4d60975e9581571 (diff) | |
download | cmogstored-d68b0ad231192c6ccf701e66be66b6bc956bed2b.tar.gz |
Code is easier to follow when interrupts occur at well-defined points. The worker processes (and master-less standalone) already follows this.
-rw-r--r-- | cmogstored.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/cmogstored.c b/cmogstored.c index e4a0f89..5d8b61c 100644 --- a/cmogstored.c +++ b/cmogstored.c @@ -444,11 +444,9 @@ static void fork_worker(unsigned worker_id) pid_t pid; pid_t parent = getpid(); /* not using getppid() since it's racy */ - mog_intr_disable(); pid = fork(); if (pid > 0) { mog_process_register(pid, worker_id); - mog_intr_enable(); } else if (pid == 0) { /* workers have no workers of their own */ worker_processes = 0; @@ -458,9 +456,10 @@ static void fork_worker(unsigned worker_id) run_worker(parent); exit(EXIT_SUCCESS); } else { - PRESERVE_ERRNO( mog_intr_enable() ); syslog(LOG_ERR, "fork() failed: %m, sleeping for 10s"); + mog_intr_enable(); sleep(10); + mog_intr_disable(); } } @@ -522,7 +521,6 @@ static void run_master(void) unsigned id; siginit(master_wakeup_handler); - mog_intr_enable(); for (id = 0; id < worker_processes; id++) fork_worker(id); @@ -533,7 +531,9 @@ static void run_master(void) if (do_upgrade) upgrade_handler(); + mog_intr_enable(); pid = waitpid(-1, &status, 0); + PRESERVE_ERRNO( mog_intr_disable() ); if (pid > 0) process_died(pid, status); |