Ack with comments

The ntfimcn_special_applier_clear() function should be removed since it is not 
used any longer.
Also a suggestion if you think it is worth doing (this could also be handled 
via a separate ticket):
The imcn process only has to run on the active node. As is the imcn process is 
started on both active and standby node but the process running on standby is 
not doing anything. I suggest that imcn is started on active node only (see 
...ntfs/ntfs_imcnutil.c)

Thanks
Lennart

> -----Original Message-----
> From: Vu Minh Nguyen [mailto:[email protected]]
> Sent: den 20 december 2016 06:51
> To: [email protected]; Minh Hon Chau
> <[email protected]>; Lennart Lund <[email protected]>;
> Gary Lee <[email protected]>
> Cc: [email protected]
> Subject: [PATCH 1 of 1] ntfd: fix circular dependency with osafntfimcnd
> [#2219]
> 
>  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