about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2013-01-31 03:52:20 +0000
committerEric Wong <normalperson@yhbt.net>2013-01-31 03:55:28 +0000
commitd68b0ad231192c6ccf701e66be66b6bc956bed2b (patch)
tree775e98e71517fb889b09293034c2877c712b6832
parent088138b235e79fa54a4e3602a4d60975e9581571 (diff)
downloadcmogstored-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.c8
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);