osaf/libs/common/glsv/include/gld.h | 2 ++ osaf/services/saf/glsv/gld/gld_api.c | 30 ++++++++++++++++++++++-------- osaf/services/saf/glsv/gld/gld_main.c | 1 - 3 files changed, 24 insertions(+), 9 deletions(-)
All core services and cpsv now register for a common sigterm handler. This patch series takes a stab at the optional services diff --git a/osaf/libs/common/glsv/include/gld.h b/osaf/libs/common/glsv/include/gld.h --- a/osaf/libs/common/glsv/include/gld.h +++ b/osaf/libs/common/glsv/include/gld.h @@ -78,4 +78,6 @@ typedef enum { #include "saImmOi.h" #include "immutil.h" +#include <daemon.h> + #endif /* !GLD_H */ diff --git a/osaf/services/saf/glsv/gld/gld_api.c b/osaf/services/saf/glsv/gld/gld_api.c --- a/osaf/services/saf/glsv/gld/gld_api.c +++ b/osaf/services/saf/glsv/gld/gld_api.c @@ -32,13 +32,17 @@ uint32_t gl_gld_hdl; void gld_main_process(SYSF_MBX *mbx); -#define FD_AMF 0 -#define FD_MBCSV 1 -#define FD_MBX 2 -#define FD_IMM 3 /* Must be the last in the fds array */ +enum { + FD_TERM = 0, + FD_AMF, + FD_MBCSV, + FD_MBX, + FD_IMM, + NUM_FD +}; -static struct pollfd fds[4]; -static nfds_t nfds = 4; +static struct pollfd fds[5]; +static nfds_t nfds = 5; /**************************************************************************** * Name : ncs_glsv_gld_lib_req @@ -475,6 +479,8 @@ void gld_main_process(SYSF_MBX *mbx) GLSV_GLD_CB *gld_cb = NULL; NCS_MBCSV_ARG mbcsv_arg; SaSelectionObjectT amf_sel_obj; + int term_fd; + TRACE_ENTER(); if ((gld_cb = (GLSV_GLD_CB *)ncshm_take_hdl(NCS_SERVICE_ID_GLD, gl_gld_hdl)) @@ -491,7 +497,11 @@ void gld_main_process(SYSF_MBX *mbx) goto end; } + daemon_sigterm_install(&term_fd); + /* Set up all file descriptors to listen to */ + fds[FD_TERM].fd = term_fd; + fds[FD_TERM].events = POLLIN; fds[FD_AMF].fd = amf_sel_obj; fds[FD_AMF].events = POLLIN; fds[FD_MBCSV].fd = gld_cb->mbcsv_sel_obj; @@ -505,9 +515,9 @@ void gld_main_process(SYSF_MBX *mbx) if ((gld_cb->immOiHandle != 0) && (gld_cb->is_impl_set == true)){ fds[FD_IMM].fd = gld_cb->imm_sel_obj; fds[FD_IMM].events = POLLIN; - nfds = FD_IMM + 1; + nfds = NUM_FD; } else { - nfds = FD_IMM; + nfds = NUM_FD - 1; } int ret = poll(fds, nfds, -1); @@ -520,6 +530,10 @@ void gld_main_process(SYSF_MBX *mbx) break; } + if (fds[FD_TERM].revents & POLLIN) { + daemon_exit(); + } + if (fds[FD_AMF].revents & POLLIN) { if (gld_cb->amf_hdl != 0) { /* dispatch all the AMF pending function */ diff --git a/osaf/services/saf/glsv/gld/gld_main.c b/osaf/services/saf/glsv/gld/gld_main.c --- a/osaf/services/saf/glsv/gld/gld_main.c +++ b/osaf/services/saf/glsv/gld/gld_main.c @@ -18,7 +18,6 @@ #include <ncssysf_tsk.h> #include <logtrace.h> -#include <daemon.h> #include "gld.h" extern void gld_main_process(SYSF_MBX *); ------------------------------------------------------------------------------ Managing the Performance of Cloud-Based Applications Take advantage of what the Cloud has to offer - Avoid Common Pitfalls. Read the Whitepaper. http://pubads.g.doubleclick.net/gampad/clk?id=121054471&iu=/4140/ostg.clktrk _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel