osaf/libs/common/mqsv/include/mqd.h | 2 ++ osaf/services/saf/mqsv/mqd/mqd_api.c | 26 ++++++++++++++++++++------ osaf/services/saf/mqsv/mqd/mqd_main.c | 1 - 3 files changed, 22 insertions(+), 7 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/mqd.h b/osaf/libs/common/mqsv/include/mqd.h --- a/osaf/libs/common/mqsv/include/mqd.h +++ b/osaf/libs/common/mqsv/include/mqd.h @@ -45,4 +45,6 @@ #include "ncssysf_lck.h" #include "ncs_mda_pvt.h" +#include <daemon.h> + #endif /* MQD_H */ diff --git a/osaf/services/saf/mqsv/mqd/mqd_api.c b/osaf/services/saf/mqsv/mqd/mqd_api.c --- a/osaf/services/saf/mqsv/mqd/mqd_api.c +++ b/osaf/services/saf/mqsv/mqd/mqd_api.c @@ -51,13 +51,17 @@ MQDLIB_INFO gl_mqdinfo; -#define FD_AMF 0 -#define FD_MBCSV 1 -#define FD_MBX 2 -#define FD_CLM 3 +enum { + FD_TERM = 0, + FD_AMF, + FD_MBCSV, + FD_MBX, + FD_CLM, + NUM_FD +}; -static struct pollfd fds[4]; -static nfds_t nfds = 4; +static struct pollfd fds[5]; +static nfds_t nfds = 5; /******************************** LOCAL ROUTINES *****************************/ static uint32_t mqd_lib_init(void); @@ -422,6 +426,8 @@ void mqd_main_process(uint32_t hdl) SaAisErrorT err = SA_AIS_OK; NCS_MBCSV_ARG mbcsv_arg; SaSelectionObjectT amfSelObj,clmSelObj; + int term_fd; + TRACE_ENTER(); /* Get the controll block */ pMqd = ncshm_take_hdl(NCS_SERVICE_ID_MQD, hdl); @@ -447,6 +453,8 @@ void mqd_main_process(uint32_t hdl) } TRACE_1("saClmSelectionObjectGet success"); + daemon_sigterm_install(&term_fd); + err = saClmClusterTrack(pMqd->clm_hdl, SA_TRACK_CHANGES_ONLY, NULL); if (SA_AIS_OK != err) { LOG_ER("saClmClusterTrack failed with error %d", err); @@ -456,6 +464,8 @@ void mqd_main_process(uint32_t hdl) TRACE_1("saClmClusterTrack success"); /* Set up all file descriptors to listen to */ + fds[FD_TERM].fd = term_fd; + fds[FD_TERM].events = POLLIN; fds[FD_AMF].fd = amfSelObj; fds[FD_AMF].events = POLLIN; fds[FD_CLM].fd = clmSelObj; @@ -475,6 +485,10 @@ void mqd_main_process(uint32_t hdl) break; } + if (fds[FD_TERM].revents & POLLIN) { + daemon_exit(); + } + /* Dispatch all the AMF pending function */ if (fds[FD_AMF].revents & POLLIN) { err = saAmfDispatch(pMqd->amf_hdl, SA_DISPATCH_ALL); diff --git a/osaf/services/saf/mqsv/mqd/mqd_main.c b/osaf/services/saf/mqsv/mqd/mqd_main.c --- a/osaf/services/saf/mqsv/mqd/mqd_main.c +++ b/osaf/services/saf/mqsv/mqd/mqd_main.c @@ -18,7 +18,6 @@ #include <ncssysf_tsk.h> #include <logtrace.h> -#include <daemon.h> #include "mqd.h" ------------------------------------------------------------------------------ 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