]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: handle sigusr1, get notified for shutdown requests
authorYehuda Sadeh <yehuda@hq.newdream.net>
Mon, 26 Jul 2010 23:32:26 +0000 (16:32 -0700)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Tue, 27 Jul 2010 17:28:47 +0000 (10:28 -0700)
src/rgw/rgw_main.cc

index deae6050823a0c79739ec9bcc26f71776d49b8f8..82976e4d7fa349813cd144c948e3100dd3d71629 100644 (file)
@@ -203,17 +203,24 @@ static bool verify_signature(struct req_state *s)
   return (auth_sign.compare(b64) == 0);
 }
 
-static sighandler_t sighandler;
+static sighandler_t sighandler_segv;
+static sighandler_t sighandler_usr1;
 
 /*
  * ?print out the C++ errors to log in case it fails
  */
-static void godown(int signum)
+static void sigsegv_handler(int signum)
 {
   BackTrace bt(0);
   bt.print(cerr);
 
-  signal(SIGSEGV, sighandler);
+  signal(SIGSEGV, sighandler_segv);
+}
+
+static void godown_handler(int signum)
+{
+  FCGX_ShutdownPending();
+  signal(SIGUSR1, sighandler_usr1);
 }
 
 /*
@@ -230,7 +237,8 @@ int main(int argc, char *argv[])
     return 5; //EIO
   }
 
-  sighandler = signal(SIGSEGV, godown);
+  sighandler_segv = signal(SIGSEGV, sigsegv_handler);
+  sighandler_usr1 = signal(SIGUSR1, godown_handler);
 
   while (FCGX_Accept(&fcgx.in, &fcgx.out, &fcgx.err, &fcgx.envp) >= 0) 
   {