osaf/services/saf/immsv/immd/immd_main.c   |   2 +-
 osaf/services/saf/immsv/immnd/immnd_evt.c  |   3 ++-
 osaf/services/saf/immsv/immnd/immnd_main.c |  19 +++++++++++++++----
 3 files changed, 18 insertions(+), 6 deletions(-)


diff --git a/osaf/services/saf/immsv/immd/immd_main.c 
b/osaf/services/saf/immsv/immd/immd_main.c
--- a/osaf/services/saf/immsv/immd/immd_main.c
+++ b/osaf/services/saf/immsv/immd/immd_main.c
@@ -202,7 +202,7 @@ int main(int argc, char *argv[])
 {
        SaAisErrorT error;
        NCS_SEL_OBJ mbx_fd;
-       struct pollfd fds[3];
+       struct pollfd fds[4];
        const int peerMaxWaitMin = 5; /*5 sec*/
        const char * peerWaitStr = getenv("IMMSV_2PBE_PEER_SC_MAX_WAIT");
        int32_t timeout = (-1);
diff --git a/osaf/services/saf/immsv/immnd/immnd_evt.c 
b/osaf/services/saf/immsv/immnd/immnd_evt.c
--- a/osaf/services/saf/immsv/immnd/immnd_evt.c
+++ b/osaf/services/saf/immsv/immnd/immnd_evt.c
@@ -8534,6 +8534,7 @@ static void immnd_evt_proc_finalize_sync
                if(err != SA_AIS_OK) {
                        immnd_ackToNid(NCSCC_RC_FAILURE);
                        if(err == SA_AIS_ERR_BAD_OPERATION) {
+                               LOG_NO("exiting");
                                exit(1); /* Dont core dump as this was not a 
local error */
                        } else {
                                LOG_ER("Unexpected local error %u in 
finalizeSync for sync client - aborting",
@@ -9401,7 +9402,7 @@ static uint32_t immnd_evt_proc_mds_evt(I
                immnd_proc_imma_down(cb, evt->info.mds_info.dest, 
evt->info.mds_info.svc_id);
        } else if ((evt->info.mds_info.change == NCSMDS_DOWN) && 
evt->info.mds_info.svc_id == NCSMDS_SVC_ID_IMMD) {
                /* Cluster is going down. */
-               LOG_NO("No IMMD service => cluster restart");
+               LOG_NO("No IMMD service => cluster restart, exiting");
                if(cb->mState < IMM_SERVER_SYNC_SERVER) {
                        immnd_ackToNid(NCSCC_RC_FAILURE);
                }
diff --git a/osaf/services/saf/immsv/immnd/immnd_main.c 
b/osaf/services/saf/immsv/immnd/immnd_main.c
--- a/osaf/services/saf/immsv/immnd/immnd_main.c
+++ b/osaf/services/saf/immsv/immnd/immnd_main.c
@@ -38,8 +38,9 @@
 
 #include "immnd.h"
 
-#define FD_AMF 0
-#define FD_MBX 1
+#define FD_TERM 0
+#define FD_AMF 1
+#define FD_MBX 2
 
 static IMMND_CB _immnd_cb;
 IMMND_CB *immnd_cb = &_immnd_cb;
@@ -241,7 +242,8 @@ int main(int argc, char *argv[])
                                   server task when we are very bussy. */
        int maxEvt = 100;
        int64_t start_time = 0LL;
-       struct pollfd fds[2];
+       struct pollfd fds[3];
+       int term_fd;
 
        daemonize(argc, argv);
 
@@ -250,10 +252,15 @@ int main(int argc, char *argv[])
                goto done;
        }
 
+       daemon_sigterm_install(&term_fd);
+
        /* Get file descriptor for mailbox */
        mbx_fd = m_NCS_IPC_GET_SEL_OBJ(&immnd_cb->immnd_mbx);
 
        /* Set up all file descriptors to listen to */
+       fds[FD_TERM].fd = term_fd;
+       fds[FD_TERM].events = POLLIN;
+
        if (immnd_cb->nid_started)
                fds[FD_AMF].fd = immnd_cb->usr1_sel_obj.rmv_obj;
        else
@@ -280,7 +287,7 @@ int main(int argc, char *argv[])
                if (!start_time) {
                        start_time = m_NCS_GET_TIME_MS;
                }
-               int ret = poll(fds, 2, (passed_time < timeout) ? (timeout - 
passed_time) : 0);
+               int ret = poll(fds, 3, (passed_time < timeout) ? (timeout - 
passed_time) : 0);
 
                if (ret == -1) {
                        if (errno == EINTR)
@@ -293,6 +300,10 @@ int main(int argc, char *argv[])
                if (ret > 0) {
                        ++eventCount;
 
+                       if (fds[FD_TERM].revents & POLLIN) {
+                               daemon_exit();
+                       }
+
                        if (fds[FD_AMF].revents & POLLIN) {
                                if (immnd_cb->amf_hdl != 0) {
                                        error = 
saAmfDispatch(immnd_cb->amf_hdl, SA_DISPATCH_ALL);

------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&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