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

Reply via email to