OK is this an ack?
Thanks,
Hans

> -----Original Message-----
> From: Ramesh Babu Betham [mailto:[email protected]]
> Sent: den 18 september 2013 17:42
> To: Hans Feldt
> Cc: [email protected]; [email protected]
> Subject: Re: [devel] [PATCH 1 of 1] base: use SCHED_RESET_ON_FORK in 
> daemonize [#532]
> 
> Yes, you are correct. Below mentioned change is enough.
> 
> > +   policy |= SCHED_RESET_ON_FORK;
> 
> Regards,
> Ramesh.
> 
> 
> ----- Original Message -----
> From: [email protected]
> To: [email protected], [email protected]
> Cc: [email protected]
> Sent: Wednesday, September 18, 2013 5:34:05 PM GMT +05:30 Chennai, Kolkata, 
> Mumbai, New Delhi
> Subject: RE: [devel] [PATCH 1 of 1] base: use SCHED_RESET_ON_FORK in 
> daemonize [#532]
> 
> OK I thought it was reverting back to defaults due to system limits or 
> something. Not that some user had configured it wrong. I get it,
> should remove all changes in daemoniz() except:
> > > +         policy |= SCHED_RESET_ON_FORK;
> 
> Ok?
> 
> Thanks,
> Hans
> 
> > -----Original Message-----
> > From: Ramesh Betham [mailto:[email protected]]
> > Sent: den 18 september 2013 13:51
> > To: Hans Feldt
> > Cc: [email protected]
> > Subject: Re: [devel] [PATCH 1 of 1] base: use SCHED_RESET_ON_FORK in 
> > daemonize [#532]
> >
> > Hi Hans,
> >
> > The reason for code existing to the failure of "sched_setscheduler()" is
> > to continue with *default values* by any chance if it fails with the
> > user defined values given through env-var settings "*__SCHED_PRIORITY"
> > and "*_SCHED_POLICY".
> >
> > Thanks,
> > Ramesh.
> >
> > On 9/18/2013 2:49 PM, Hans Feldt wrote:
> > >   osaf/libs/core/common/daemon.c |  23 ++++++++++++++++++-----
> > >   osaf/libs/core/leap/os_defs.c  |   8 --------
> > >   2 files changed, 18 insertions(+), 13 deletions(-)
> > >
> > >
> > > In ncs_os_process_execute_timed() non async signal safe functions are used
> > > between fork() and exec(). That can cause undeterministic behaviour in the
> > > child and cause problems for AMF to provide service.
> > >
> > > The amfnd main thread runs with RT scheduling policy and
> > > ncs_os_process_execute_timed() needs to guarantee that child processes get
> > > normal scheduling policy and not just inherits the callers policy.
> > >
> > > By adding the SCHED_RESET_ON_FORK option to the sched_setscheduler system 
> > > call
> > > it is guaranteed by the kernel that all child processes gets normal
> > > scheduling policy. No matter the policy of the parent process/thread.
> > >
> > > diff --git a/osaf/libs/core/common/daemon.c 
> > > b/osaf/libs/core/common/daemon.c
> > > --- a/osaf/libs/core/common/daemon.c
> > > +++ b/osaf/libs/core/common/daemon.c
> > > @@ -40,6 +40,15 @@
> > >   #include <ncsgl_defs.h>
> > >   #include <os_defs.h>
> > >
> > > +/*
> > > + * See "man 2 sched_setscheduler"
> > > + * SCHED_RESET_ON_FORK is supported from Linux 2.6.32 but is not in 
> > > POSIX (yet)
> > > + * SCHED_RESET_ON_FORK is defined in <linux/sched.h>
> > > + * The above file cannot be included because it will break an LSB build
> > > + * We trust that the Linux kernel ABI will never change and is backwards
> > > + * compatible thus it is safe to define our own constant here.
> > > + */
> > > +#define SCHED_RESET_ON_FORK     0x40000000
> > >
> > >   #define DEFAULT_RUNAS_USERNAME  "opensaf"
> > >
> > > @@ -216,6 +225,7 @@ void daemonize(int argc, char *argv[])
> > >           {
> > >                   policy = SCHED_RR;
> > >                   prio_val = sched_get_priority_min(policy);
> > > +         policy |= SCHED_RESET_ON_FORK;
> > >           }
> > >
> > >           strcpy(t_str, basename(argv[0]));
> > > @@ -235,14 +245,17 @@ void daemonize(int argc, char *argv[])
> > >
> > >           param.sched_priority = prio_val;
> > >           if (sched_setscheduler(0, policy, &param) == -1) {
> > > -         syslog(LOG_ERR, "Could not set scheduling class for %s", 
> > > strerror(errno));
> > > +         syslog(LOG_ERR, "daemonize: could not set scheduling class - 
> > > %s", strerror(errno));
> > >                   if( (!strncmp("osafamfwd", basename(argv[0]), 9)) || 
> > > (!strncmp("osafamfnd", basename(argv[0]), 9)))
> > >                   {
> > > -                 policy = SCHED_RR;
> > > +                 syslog(LOG_NOTICE, "daemonize: setting scheduler policy 
> > > to OTHER");
> > > +                 syslog(LOG_WARNING, "daemonize: this system is not 
> > > correctly configured");
> > > +                 policy = SCHED_OTHER;
> > >                           param.sched_priority = 
> > > sched_get_priority_min(policy);
> > > -                 syslog(LOG_INFO, "setting to default values");
> > > -                 if (sched_setscheduler(0, policy, &param) == -1)
> > > -                         syslog(LOG_ERR, "Could not set scheduling class 
> > > for %s", strerror(errno));
> > > +                 if (sched_setscheduler(0, policy, &param) == -1) {
> > > +                         syslog(LOG_ERR, "daemonize: could not set 
> > > scheduling class, exiting");
> > > +                         exit(EXIT_FAILURE);
> > > +                 }
> > >                   }
> > >           }
> > >
> > > 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
> > > @@ -999,14 +999,6 @@ uint32_t ncs_os_process_execute_timed(NC
> > >           osaf_mutex_lock_ordie(&s_cloexec_mutex);
> > >
> > >           if ((pid = fork()) == 0) {
> > > -         /*
> > > -          ** Make sure forked processes have default scheduling class
> > > -          ** independent of the callers scheduling class.
> > > -          */
> > > -         struct sched_param param = {.sched_priority = 0 };
> > > -         if (sched_setscheduler(0, SCHED_OTHER, &param) == -1)
> > > -                 syslog(LOG_ERR, "%s: Could not setscheduler: %s", 
> > > __FUNCTION__, strerror(errno));
> > > -
> > >                   /* set the environment variables */
> > >                   for (; count > 0; count--) {
> > >                           setenv(node->name, node->value, 
> > > node->overwrite);
> >
> > ------------------------------------------------------------------------------
> > LIMITED TIME SALE - Full Year of Microsoft Training For Just $49.99!
> > 1,500+ hours of tutorials including VisualStudio 2012, Windows 8, SharePoint
> > 2013, SQL 2012, MVC 4, more. BEST VALUE: New Multi-Library Power Pack 
> > includes
> > Mobile, Cloud, Java, and UX Design. Lowest price ever! Ends 9/20/13.
> > http://pubads.g.doubleclick.net/gampad/clk?id=58041151&iu=/4140/ostg.clktrk
> > _______________________________________________
> > Opensaf-devel mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/opensaf-devel
------------------------------------------------------------------------------
LIMITED TIME SALE - Full Year of Microsoft Training For Just $49.99!
1,500+ hours of tutorials including VisualStudio 2012, Windows 8, SharePoint
2013, SQL 2012, MVC 4, more. BEST VALUE: New Multi-Library Power Pack includes
Mobile, Cloud, Java, and UX Design. Lowest price ever! Ends 9/20/13. 
http://pubads.g.doubleclick.net/gampad/clk?id=58041151&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to