After adding FD_TERM, you have forgotten to increase the array size of fds to 4.

Regards,
Zoran

-----Original Message-----
From: Hans Feldt [mailto:hans.fe...@ericsson.com] 
Sent: den 19 december 2013 09:28
To: Anders Björnerstedt
Cc: opensaf-devel@lists.sourceforge.net
Subject: [devel] [PATCH 1 of 2] immd: use daemon_sigterm_install (#581)

 osaf/services/saf/immsv/immd/immd_main.c |  20 +++++++++++++++-----
 1 files changed, 15 insertions(+), 5 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
@@ -40,10 +40,11 @@
 static IMMD_CB _immd_cb;
 IMMD_CB *immd_cb = &_immd_cb;
 
-#define FD_USR1 0
-#define FD_AMF 0
-#define FD_MBCSV 1
-#define FD_MBX 2
+#define FD_TERM 0
+#define FD_USR1 1
+#define FD_AMF 1
+#define FD_MBCSV 2
+#define FD_MBX 3
 
 /* ========================================================================
  *   FUNCTION PROTOTYPES
@@ -208,6 +209,7 @@ int main(int argc, char *argv[])
        int32_t total_wait = (-1);
        int64_t start_time = 0LL;
        uint32_t print_at_secs = 1LL;
+       int term_fd;
 
        daemonize(argc, argv);
 
@@ -216,6 +218,8 @@ int main(int argc, char *argv[])
                goto done;
        }
 
+       daemon_sigterm_install(&term_fd);
+
        if(peerWaitStr) {
                int32_t peerMaxWait = atoi(peerWaitStr);
                if(peerMaxWait < peerMaxWaitMin) {
@@ -239,6 +243,8 @@ int main(int argc, char *argv[])
        mbx_fd = ncs_ipc_get_sel_obj(&immd_cb->mbx);
 
        /* Set up all file descriptors to listen to */
+       fds[FD_TERM].fd = term_fd;
+       fds[FD_TERM].events = POLLIN;
        fds[FD_USR1].fd = immd_cb->usr1_sel_obj.rmv_obj;
        fds[FD_USR1].events = POLLIN;
        fds[FD_MBCSV].fd = immd_cb->mbcsv_sel_obj; @@ -247,7 +253,7 @@ int 
main(int argc, char *argv[])
        fds[FD_MBX].events = POLLIN;
 
        while (1) {
-               int ret = poll(fds, 3, timeout);
+               int ret = poll(fds, 4, timeout);
 
                if (ret == -1) {
                        if (errno == EINTR)
@@ -257,6 +263,10 @@ int main(int argc, char *argv[])
                        break;
                }
 
+               if (fds[FD_TERM].revents & POLLIN) {
+                       daemon_exit();
+               }
+
                if (fds[FD_MBCSV].revents & POLLIN) {
                        if (immd_mbcsv_dispatch(immd_cb) != NCSCC_RC_SUCCESS) {
                                LOG_ER("MBCSv Dispatch Failed");

------------------------------------------------------------------------------
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

------------------------------------------------------------------------------
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