/*
if possible, make this task real time
*/
-void set_scheduler(void)
+bool set_scheduler(void)
{
#ifdef _AIX_
#if HAVE_THREAD_SETSCHED
ti = 0ULL;
if (getthrds64(getpid(), &te, sizeof(te), &ti, 1) != 1) {
DEBUG(DEBUG_ERR, ("Unable to get thread information\n"));
- return;
+ return false;
}
if (thread_setsched(te.ti_tid, 0, SCHED_RR) == -1) {
DEBUG(DEBUG_ERR, ("Unable to set scheduler to SCHED_RR (%s)\n",
strerror(errno)));
+ return false;
} else {
- DEBUG(DEBUG_NOTICE, ("Set scheduler to SCHED_RR\n"));
+ return true;
}
#endif
#else /* no AIX */
if (sched_setscheduler(0, policy, &p) == -1) {
DEBUG(DEBUG_CRIT,("Unable to set scheduler to SCHED_FIFO (%s)\n",
strerror(errno)));
+ return false;
} else {
- DEBUG(DEBUG_NOTICE,("Set scheduler to SCHED_FIFO\n"));
+ return true;
}
#endif
#endif
+ return false;
}
/*
void ctdb_node_dead(struct ctdb_node *node);
void ctdb_node_connected(struct ctdb_node *node);
bool ctdb_blocking_freeze(struct ctdb_context *ctdb);
-void set_scheduler(void);
+bool set_scheduler(void);
void reset_scheduler(void);
struct tevent_signal *ctdb_init_sigchld(struct ctdb_context *ctdb);
if (ctdb->do_setsched) {
/* try to set us up as realtime */
- set_scheduler();
+ if (!set_scheduler()) {
+ exit(1);
+ }
+ DEBUG(DEBUG_NOTICE, ("Set real-time scheduler priority\n"));
}
/* ensure the socket is deleted on exit of the daemon */