osaf/libs/common/mqsv/include/mqnd.h | 2 ++ osaf/services/saf/mqsv/mqnd/mqnd_init.c | 31 +++++++++++++++++++++++-------- osaf/services/saf/mqsv/mqnd/mqnd_main.c | 1 - 3 files changed, 25 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/mqsv/include/mqnd.h b/osaf/libs/common/mqsv/include/mqnd.h --- a/osaf/libs/common/mqsv/include/mqnd.h +++ b/osaf/libs/common/mqsv/include/mqnd.h @@ -46,4 +46,6 @@ #include "saf_mem.h" #include "saClm.h" +#include <daemon.h> + #endif diff --git a/osaf/services/saf/mqsv/mqnd/mqnd_init.c b/osaf/services/saf/mqsv/mqnd/mqnd_init.c --- a/osaf/services/saf/mqsv/mqnd/mqnd_init.c +++ b/osaf/services/saf/mqsv/mqnd/mqnd_init.c @@ -33,12 +33,17 @@ #define MQND_CLM_API_TIMEOUT 10000000000LL uint32_t gl_mqnd_cb_hdl = 0; -#define FD_AMF 0 -#define FD_CLM 1 -#define FD_MBX 2 -#define FD_IMM 3 /* Must be the last in the fds array */ -static struct pollfd fds[4]; -static nfds_t nfds = 4; +enum { + FD_TERM = 0, + FD_AMF, + FD_CLM, + FD_MBX, + FD_IMM, + NUM_FD +}; + +static struct pollfd fds[5]; +static nfds_t nfds = 5; /* Static Function Declerations */ static uint32_t mqnd_extract_create_info(int argc, char *argv[], MQSV_CREATE_INFO *create_info); static uint32_t mqnd_extract_destroy_info(int argc, char *argv[], MQSV_DESTROY_INFO *destroy_info); @@ -748,6 +753,8 @@ void mqnd_main_process(uint32_t hdl) MQSV_DSEND_EVT *dsend_evt = NULL; SaSelectionObjectT amf_sel_obj, clm_sel_obj; SaAisErrorT clm_error, err; + int term_fd; + TRACE_ENTER(); cb = ncshm_take_hdl(NCS_SERVICE_ID_MQND, hdl); @@ -765,11 +772,15 @@ void mqnd_main_process(uint32_t hdl) } TRACE_1("saAmfSelectionObjectGet Successfull"); + daemon_sigterm_install(&term_fd); + if (saClmSelectionObjectGet(cb->clm_hdl, &clm_sel_obj) != SA_AIS_OK) { LOG_ER("saClmSelectionObjectGet Failed"); return; } + 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_CLM].fd = clm_sel_obj; @@ -790,9 +801,9 @@ void mqnd_main_process(uint32_t hdl) if (cb->immOiHandle != 0) { fds[FD_IMM].fd = 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); @@ -804,6 +815,10 @@ void mqnd_main_process(uint32_t hdl) break; } + if (fds[FD_TERM].revents & POLLIN) { + daemon_exit(); + } + if (fds[FD_AMF].revents & POLLIN) { if (cb->amf_hdl != 0) { err = saAmfDispatch(cb->amf_hdl, SA_DISPATCH_ALL); diff --git a/osaf/services/saf/mqsv/mqnd/mqnd_main.c b/osaf/services/saf/mqsv/mqnd/mqnd_main.c --- a/osaf/services/saf/mqsv/mqnd/mqnd_main.c +++ b/osaf/services/saf/mqsv/mqnd/mqnd_main.c @@ -18,7 +18,6 @@ #include <ncssysf_tsk.h> #include <logtrace.h> -#include <daemon.h> #include "mqnd.h" extern void mqnd_main_process(uint32_t hdl); ------------------------------------------------------------------------------ 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