cedric pushed a commit to branch master.

commit 338218109bf4c889d5392fb8a810b189eb661ca1
Author: Jean-Philippe Andre <[email protected]>
Date:   Wed Jun 12 15:34:48 2013 +0900

    evas/cserve2: catch more signals and exit nicely
    
    Also, ignore USR1 and USR2.
---
 src/bin/evas/evas_cserve2_main_loop_linux.c | 39 ++++++++++++++++++-----------
 1 file changed, 24 insertions(+), 15 deletions(-)

diff --git a/src/bin/evas/evas_cserve2_main_loop_linux.c 
b/src/bin/evas/evas_cserve2_main_loop_linux.c
index 35c9d56..590a862 100644
--- a/src/bin/evas/evas_cserve2_main_loop_linux.c
+++ b/src/bin/evas/evas_cserve2_main_loop_linux.c
@@ -90,16 +90,19 @@ _signal_handle_child(struct signalfd_siginfo *sinfo 
EINA_UNUSED)
 }
 
 static void
-_signal_handle_int(struct signalfd_siginfo *sinfo EINA_UNUSED)
+_signal_handle_exit(struct signalfd_siginfo *sinfo)
 {
-   DBG("Received SIGINT. Honoring request.");
-   terminate = EINA_TRUE;
-}
+   const char *name;
 
-static void
-_signal_handle_term(struct signalfd_siginfo *sinfo EINA_UNUSED)
-{
-   DBG("Received SIGTERM. Honoring request.");
+   switch (sinfo->ssi_signo)
+     {
+      case SIGINT:  name = "SIGINT"; break;
+      case SIGTERM: name = "SIGTERM"; break;
+      case SIGQUIT: name = "SIGQUIT"; break;
+      default: return;
+     }
+
+   DBG("Received %s. Honoring request.", name);
    terminate = EINA_TRUE;
 }
 
@@ -123,16 +126,19 @@ _signalfd_handler(int fd, Fd_Flags flags EINA_UNUSED, 
void *data EINA_UNUSED)
         switch(sinfo.ssi_signo)
           {
            case SIGCHLD:
-              _signal_handle_child(&sinfo);
-              break;
+             _signal_handle_child(&sinfo);
+             break;
            case SIGINT:
-              _signal_handle_int(&sinfo);
-              break;
            case SIGTERM:
-              _signal_handle_term(&sinfo);
-              break;
+           case SIGQUIT:
+             _signal_handle_exit(&sinfo);
+             break;
+           case SIGUSR1:
+           case SIGUSR2:
+             DBG("Ignored signal %d", sinfo.ssi_signo);
+             break;
            default:
-              ERR("Caught unexpected signal '%d'.", sinfo.ssi_signo);
+             ERR("Caught unexpected signal '%d'.", sinfo.ssi_signo);
           }
      }
 }
@@ -146,6 +152,9 @@ _signalfd_setup(void)
    sigaddset(&mask, SIGCHLD);
    sigaddset(&mask, SIGINT);
    sigaddset(&mask, SIGTERM);
+   sigaddset(&mask, SIGQUIT);
+   sigaddset(&mask, SIGUSR1);
+   sigaddset(&mask, SIGUSR2);
 
    if (sigprocmask(SIG_BLOCK, &mask, NULL) == -1)
      {

-- 

------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev

Reply via email to