What happens in/with the child process if this code is instead removed 
completely?
/HansF

> -----Original Message-----
> From: Hans Nordebäck
> Sent: den 23 april 2014 09:11
> To: Hans Feldt; Anders Widell; ramesh.bet...@oracle.com
> Cc: opensaf-devel@lists.sourceforge.net
> Subject: [PATCH 1 of 1] base: use dup2 instead of freopen (non 
> async-signal-safe) V1 [#532]
> 
>  osaf/libs/core/leap/os_defs.c |  21 +++++++++++++++------
>  1 files changed, 15 insertions(+), 6 deletions(-)
> 
> 
> New issues where freopen "freezes", use dup2 instead.
> Non async-signal-safe are used in ncs_os_process_execute_timed,
> sched_setscheduler, syslog, setenv, getenv and freopen. Syslog may
> "freeze" but are called only when an error has been detected. The
> remaining should be removed.
> 
> diff --git a/osaf/libs/core/leap/os_defs.c b/osaf/libs/core/leap/os_defs.c
> --- a/osaf/libs/core/leap/os_defs.c
> +++ b/osaf/libs/core/leap/os_defs.c
> @@ -971,6 +971,7 @@ uint32_t ncs_os_process_execute_timed(NC
> 
>               /* By default we close all inherited file descriptors in the 
> child */
>               if (getenv("OPENSAF_KEEP_FD_OPEN_AFTER_FORK") == NULL) {
> +                     int fd1;
>                       /* Close all inherited file descriptors */
>                       int i = sysconf(_SC_OPEN_MAX);
>                       if (i == -1) {
> @@ -981,12 +982,20 @@ uint32_t ncs_os_process_execute_timed(NC
>                               (void) close(i); /* close all descriptors */
> 
>                       /* Redirect standard files to /dev/null */
> -                     if (freopen("/dev/null", "r", stdin) == NULL)
> -                             syslog(LOG_ERR, "%s: freopen stdin failed - 
> %s", __FUNCTION__, strerror(errno));
> -                     if (freopen("/dev/null", "w", stdout) == NULL)
> -                             syslog(LOG_ERR, "%s: freopen stdout failed - 
> %s", __FUNCTION__, strerror(errno));
> -                     if (freopen("/dev/null", "w", stderr) == NULL)
> -                             syslog(LOG_ERR, "%s: freopen stderr failed - 
> %s", __FUNCTION__, strerror(errno));
> +                     if ((fd1 = open("/dev/null", O_RDWR)) < 0) {
> +                             syslog(LOG_ERR, "%s: open /dev/null failed - 
> %s", __FUNCTION__, strerror(errno));
> +                     }
> +                     else {
> +                             if (dup2(fd1, STDIN_FILENO) < 0) {
> +                                     syslog(LOG_ERR, "%s: dup2 stdin failed 
> - %s", __FUNCTION__, strerror(errno));
> +                             }
> +                             if (dup2(fd1, STDOUT_FILENO) < 0) {
> +                                     syslog(LOG_ERR, "%s: dup2 stdout failed 
> - %s", __FUNCTION__, strerror(errno));
> +                             }
> +                             if (dup2(fd1, STDERR_FILENO) < 0) {
> +                                     syslog(LOG_ERR, "%s: dup2 stderr failed 
> - %s", __FUNCTION__, strerror(errno));
> +                             }
> +                     }
>               }
> 
>               /* RUNASROOT gives the OpenSAF user a possibility to maintain 
> the < 4.2 behaviour.

------------------------------------------------------------------------------
Start Your Social Network Today - Download eXo Platform
Build your Enterprise Intranet with eXo Platform Software
Java Based Open Source Intranet - Social, Extensible, Cloud Ready
Get Started Now And Turn Your Intranet Into A Collaboration Platform
http://p.sf.net/sfu/ExoPlatform
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to