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