The only problem here is the kernel requirement 2.6.32 http://wiki.novell.com/index.php/Kernel_versions https://access.redhat.com/site/articles/3078 http://www.windriver.com/announces/linux4/
system requirements would be SLES11-SP1, RHEL6 and WRL4 I am not sure how to go about this. Worst case we have to keep the old code behind some ifdefs Thanks, Hans On 09/18/2013 06:17 PM, Ramesh Babu Betham wrote: > Yes. Ack. > > Regards, > Ramesh. > > ----- Original Message ----- > From: [email protected] > To: [email protected] > Cc: [email protected], [email protected] > Sent: Wednesday, September 18, 2013 9:16:06 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 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, ¶m) == -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, ¶m) == -1) >>>> - syslog(LOG_ERR, "Could not set scheduling class >>>> for %s", strerror(errno)); >>>> + if (sched_setscheduler(0, policy, ¶m) == -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, ¶m) == -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
