Hi Gary,

Any comment from you? Thanks.

Regards, Vu

> -----Original Message-----
> From: minh chau [mailto:[email protected]]
> Sent: Wednesday, December 21, 2016 5:29 AM
> To: Vu Minh Nguyen <[email protected]>;
> [email protected]; [email protected];
> [email protected]
> Cc: [email protected]
> Subject: Re: [PATCH 1 of 1] ntfd: fix circular dependency with
osafntfimcnd
> [#2219]
> 
> ack
> thanks,
> Minh
> 
> On 20/12/16 16:50, Vu Minh Nguyen wrote:
> >   osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_main.c |  47
+++++---------------
> ----
> >   1 files changed, 11 insertions(+), 36 deletions(-)
> >
> >
> > Refer to the #2219 ticket for more info on the problem.
> >
> > Fix the problem by exiting the osafntfimcnd process right away
> > when getting SIGTERM signal.
> > By this way, notifications about IMM attribute change status
> > may be lost but this possibility has been mentioned in PR doc.
> >
> > Once active osafntfimcnd instance comes up, it will inform to users
> > about the possiblity of ntf msg lost in the form of notification.
> >
> > diff --git a/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_main.c
> b/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_main.c
> > --- a/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_main.c
> > +++ b/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_main.c
> > @@ -40,11 +40,9 @@
> >
> >   enum {
> >     FD_IMM = 0,
> > -   FD_TERM,
> >     SIZE_FDS
> >   } NTFIMCN_FDS;
> >
> > -static NCS_SEL_OBJ term_sel_obj; /* Selection object for TERM signal
> events */
> >
> >   /*
> >    * Global parameters
> > @@ -55,14 +53,11 @@ static struct pollfd fds[SIZE_FDS];
> >   static nfds_t nfds = SIZE_FDS;
> >   static unsigned int category_mask=0;
> >
> > -/**
> > - * Clear special applier name and exit
> > - *
> > - * @param status
> > - */
> >   void imcn_exit(int status)
> >   {
> > -   ntfimcn_special_applier_clear();
> > +   // No need to clear OI Applier name
> > +   // as IMM will do that if the owning
> > +   // process no longer exist.
> >     _Exit(status);
> >   }
> >
> > @@ -95,16 +90,7 @@ static void sigterm_handler(int sig)
> >   {
> >     (void) sig;
> >     signal(SIGTERM, SIG_IGN);
> > -   ncs_sel_obj_ind(&term_sel_obj);
> > -}
> > -
> > -/**
> > - * TERM event handler
> > - */
> > -static void handle_sigterm_event(void)
> > -{
> > -   LOG_NO("exiting on signal %d", SIGTERM);
> > -   imcn_exit(EXIT_SUCCESS);
> > +   _Exit(EXIT_SUCCESS);
> >   }
> >
> >   /*
> > @@ -116,6 +102,12 @@ int main(int argc, char** argv)
> >     const char* trace_label = "osafntfimcnd";
> >     SaAisErrorT ais_error = SA_AIS_OK;
> >
> > +   // To make sure the SIGTERM is not lost during init phrase
> > +   if (signal(SIGTERM, sigterm_handler) == SIG_ERR) {
> > +           LOG_ER("signal TERM failed: %s", strerror(errno));
> > +           _Exit(EXIT_FAILURE);
> > +   }
> > +
> >     /*
> >      * Activate Log Trace
> >      */
> > @@ -131,7 +123,7 @@ int main(int argc, char** argv)
> >             syslog(LOG_ERR, "osafntfimcnd logtrace_init FAILED");
> >             /* We allow to execute anyway. */
> >     }
> > -
> > +
> >     /*
> >      * Initiate HA state
> >      */
> > @@ -166,24 +158,11 @@ int main(int argc, char** argv)
> >             imcn_exit(EXIT_FAILURE);
> >     }
> >
> > -   /* Termination signal with handler */
> > -   if (ncs_sel_obj_create(&term_sel_obj) != NCSCC_RC_SUCCESS) {
> > -           LOG_ER("ncs_sel_obj_create failed");
> > -           _Exit(EXIT_FAILURE);
> > -   }
> > -
> > -   if (signal(SIGTERM, sigterm_handler) == SIG_ERR) {
> > -           LOG_ER("signal TERM failed: %s", strerror(errno));
> > -           _Exit(EXIT_FAILURE);
> > -   }
> > -
> >     /*
> >      * Initiate polling
> >      */
> >     fds[FD_IMM].fd = ntfimcn_cb.immSelectionObject;
> >     fds[FD_IMM].events = POLLIN;
> > -   fds[FD_TERM].fd = term_sel_obj.rmv_obj;
> > -   fds[FD_TERM].events = POLLIN;
> >
> >     LOG_NO("Started");
> >
> > @@ -197,10 +176,6 @@ int main(int argc, char** argv)
> >                     imcn_exit(EXIT_FAILURE);
> >             }
> >
> > -           if (fds[FD_TERM].revents & POLLIN) {
> > -                   handle_sigterm_event();
> > -           }
> > -
> >             if (fds[FD_IMM].revents & POLLIN) {
> >                     ais_error =
> saImmOiDispatch(ntfimcn_cb.immOiHandle, SA_DISPATCH_ALL);
> >                     if (ais_error != SA_AIS_OK) {
> >



------------------------------------------------------------------------------
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/intel
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to