Ack. Not tested.
Thanks,
Ramesh.
On 1/12/2016 7:36 PM, Anders Widell wrote:
> osaf/libs/core/common/daemon.c | 11 ++++++++++-
> osaf/libs/core/leap/os_defs.c | 21 +++++++++++++++++++--
> 2 files changed, 29 insertions(+), 3 deletions(-)
>
>
> OpenSAF will now fall back to the SCHED_OTHER scheduling policy when it fails
> to set a real-time scheduling policy.
>
> 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
> @@ -254,7 +254,16 @@ void daemonize(int argc, char *argv[])
> policy = strtol(thread_policy, NULL, 0);
>
> param.sched_priority = prio_val;
> - if (sched_setscheduler(0, policy, ¶m) == -1) {
> + int result = sched_setscheduler(0, policy, ¶m);
> + if (result == -1 && errno == EPERM && policy != SCHED_OTHER) {
> + LOG_WA("sched_setscheduler failed with EPERM, falling back to "
> + "SCHED_OTHER policy for %s", basename(argv[0]));
> + policy = SCHED_OTHER;
> + prio_val = sched_get_priority_min(policy);
> + param.sched_priority = prio_val;
> + result = sched_setscheduler(0, policy, ¶m);
> + }
> + if (result == -1) {
> syslog(LOG_ERR, "Could not set scheduling class for %s",
> strerror(errno));
> if( (!strncmp("osafamfwd", basename(argv[0]), 9)) ||
> (!strncmp("osafamfnd", basename(argv[0]), 9)))
> {
> 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
> @@ -52,6 +52,7 @@
> #include "ncssysf_def.h"
> #include "osaf_utility.h"
> #include "osaf_time.h"
> +#include "logtrace.h"
>
> NCS_OS_LOCK gl_ncs_atomic_mtx;
> #ifndef NDEBUG
> @@ -222,12 +223,28 @@ unsigned int ncs_os_task(NCS_OS_TASK *ta
> rc = pthread_create(task->info.create.o_handle, &attr,
> (void *(*)(void
> *))task->info.create.i_entry_point,
> task->info.create.i_ep_arg);
> + if (rc == EPERM && policy != SCHED_OTHER) {
> + LOG_WA("pthread_create failed with EPERM, "
> + "falling back to SCHED_OTHER policy "
> + "for %s", task->info.create.i_name);
> + policy = SCHED_OTHER;
> + sp.sched_priority =
> sched_get_priority_min(policy);
> + rc = pthread_attr_setschedpolicy(&attr, policy);
> + if (rc != 0) osaf_abort(rc);
> + rc = pthread_attr_setschedparam(&attr, &sp);
> + if (rc != 0) osaf_abort(rc);
> + rc = pthread_create(task->info.create.o_handle,
> + &attr,
> + (void *(*)(void *))task->info.create.
> + i_entry_point,
> + task->info.create.i_ep_arg);
> + }
> if (rc != 0) {
> if (policy == SCHED_RR || policy == SCHED_FIFO)
> - syslog(LOG_ERR, "Creation of real-time
> thread '%s' FAILED - '%s'",
> + LOG_ER("Creation of real-time thread
> '%s' FAILED - %s",
>
> task->info.create.i_name, strerror(rc));
> else
> - syslog(LOG_ERR, "Creation of thread
> '%s' FAILED - '%s'",
> + LOG_ER("Creation of thread '%s' FAILED
> - %s",
>
> task->info.create.i_name, strerror(rc));
> free(task->info.create.o_handle);
> return NCSCC_RC_FAILURE;
------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel