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