Ack. Thanks, Praveen
On 30-Nov-16 1:29 PM, Hans Nordeback wrote: > osaf/services/saf/amf/amfnd/main.cc | 51 > +++++++++++++++++++++++++++++++++--- > 1 files changed, 46 insertions(+), 5 deletions(-) > > > diff --git a/osaf/services/saf/amf/amfnd/main.cc > b/osaf/services/saf/amf/amfnd/main.cc > --- a/osaf/services/saf/amf/amfnd/main.cc > +++ b/osaf/services/saf/amf/amfnd/main.cc > @@ -31,11 +31,15 @@ > #include "immutil.h" > #include "logtrace.h" > #include "nid_api.h" > +#include "osaf_time.h" > #include <imm.h> > > -#define FD_MBX 0 > -#define FD_TERM 1 > -#define FD_CLM 2 > +enum { > + FD_MBX = 0, > + FD_TERM = 1, > + FD_CLM = 2, > + FD_AMFD_FIFO = 3 > +}; > > static const char* internal_version_id_ __attribute__ ((used)) = "@(#) $Id: > " INTERNAL_VERSION_ID " $"; > > @@ -496,6 +500,30 @@ static void sigterm_handler(int sig) > signal(SIGTERM, SIG_IGN); > } > > +static int open_amfd_fifo() { > + const std::string fifo_dir = PKGLOCALSTATEDIR; > + std::string fifo_file = fifo_dir + "/" + "osafamfd.fifo"; > + int fifo_fd = -1; > + int retry_cnt = 0; > + > + if (access(fifo_file.c_str(), F_OK ) != -1 ) { > + do { > + if (retry_cnt > 0) { > + osaf_nanosleep(&kHundredMilliseconds); > + } > + fifo_fd = open(fifo_file.c_str(), O_WRONLY|O_NONBLOCK); > + } while ((fifo_fd == -1) && > + (retry_cnt++ < 5 && (errno == EINTR || errno == ENXIO))); > + if (fifo_fd == -1) { > + LOG_ER("Failed to open %s, error: %s", fifo_file.c_str(), > + strerror(errno)); > + } else { > + LOG_NO("Start monitoring AMFD using %s", fifo_file.c_str()); > + } > + } > + return fifo_fd; > +} > + > /**************************************************************************** > Name : avnd_main_process > > @@ -509,9 +537,10 @@ static void sigterm_handler(int sig) > > ******************************************************************************/ > void avnd_main_process(void) > { > + int amfd_fifo_fd = -1; > NCS_SEL_OBJ mbx_fd; > - struct pollfd fds[4]; > - nfds_t nfds = 3; > + struct pollfd fds[5]; > + nfds_t nfds = 4; > AVND_EVT *evt; > SaAisErrorT result = SA_AIS_OK; > SaAisErrorT rc = SA_AIS_OK; > @@ -542,6 +571,10 @@ void avnd_main_process(void) > fds[FD_CLM].fd = avnd_cb->clm_sel_obj; > fds[FD_CLM].events = POLLIN; > > + amfd_fifo_fd = open_amfd_fifo(); > + fds[FD_AMFD_FIFO].fd = amfd_fifo_fd; > + fds[FD_AMFD_FIFO].events = POLLIN; > + > /* now wait forever */ > while (1) { > int ret = poll(fds, nfds, -1); > @@ -555,6 +588,14 @@ void avnd_main_process(void) > break; > } > > + if (fds[FD_AMFD_FIFO].revents & POLLERR) { > + LOG_ER("AMFD has unexpectedly crashed. Rebooting node"); > + opensaf_reboot(avnd_cb->node_info.nodeId, > + > osaf_extended_name_borrow(&avnd_cb->node_info.executionEnvironment), > + "AMFD has unexpectedly crashed. > Rebooting node"); > + exit(0); > + } > + > if (avnd_cb->clmHandle && (fds[FD_CLM].revents & POLLIN)) { > //LOG_NO("DEBUG-> CLM event fd: %d sel_obj: %llu, clm > handle: %llu", fds[FD_CLM].fd, avnd_cb->clm_sel_obj, avnd_cb->clmHandle); > result = saClmDispatch(avnd_cb->clmHandle, > SA_DISPATCH_ALL); > ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today.http://sdm.link/xeonphi _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel