osaf/libs/core/leap/os_defs.c | 13 +++++++------
1 files changed, 7 insertions(+), 6 deletions(-)
OpenSAF would fail to start when an invalid thread scheduling policy has been
configured, e.g. using the following configuration options for one of the
OpenSAF services:
export OSAF_MDS_SCHED_PRIORITY=0
export OSAF_MDS_SCHED_POLICY=3
The OpenSAF services fail with the following messages:
Dec 24 14:40:02 SLES_NEW2 opensafd[15010]: ER Timed-out for response from RDE
Dec 24 14:40:02 SLES_NEW2 opensafd[15010]: ER
Dec 24 14:40:02 SLES_NEW2 opensafd[15010]: ER Going for recovery
Dec 24 14:40:02 SLES_NEW2 opensafd[15010]: ER Trying To RESPAWN
/usr/lib64/opensaf/clc-cli/osaf-rded attempt #1
Dec 24 14:40:02 SLES_NEW2 opensafd[15010]: ER Sending SIGKILL to RDE, pid=15031
The reason is that scheduling policy 3 (SCHED_BATCH) is not a valid parameter to
the pthread_attr_setschedpolicy() function, and OpenSAF passes the configured
policy to this function without whecking that it is valid.
A check for this case has been added, so that we fall back to the default
scheduling policy when an invalid policy has been configured.
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
@@ -164,15 +164,16 @@ unsigned int ncs_os_task(NCS_OS_TASK *ta
min_prio = sched_get_priority_min(policy);
max_prio = sched_get_priority_max(policy);
- if((sp.sched_priority < min_prio) || (sp.sched_priority
> max_prio)) {
+ if ((sp.sched_priority < min_prio) ||
(sp.sched_priority > max_prio) ||
+ pthread_attr_setschedpolicy(&attr, policy) != 0) {
/* Set to defaults */
- syslog(LOG_NOTICE, "scheduling priority %d for
given policy %d to the task %s is not \
- within
the range, setting to default \
- values ",
sp.sched_priority, policy, task->info.create.i_name);
+ syslog(LOG_NOTICE, "scheduling priority %d or
policy %d for the "
+ "task %s is invalid, setting to default
values",
+ sp.sched_priority, policy,
task->info.create.i_name);
policy = task->info.create.i_policy;
sp.sched_priority =
task->info.create.i_priority;
- syslog(LOG_INFO, "%s task default policy is %d,
\
- priority is %d", task->info.create.i_name,
policy, sp.sched_priority);
+ syslog(LOG_INFO, "%s task default policy is %d,
priority is %d",
+ task->info.create.i_name, policy,
sp.sched_priority);
}
#ifdef RLIMIT_RTPRIO
------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today.
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel