From 4b9bf111d76495b0f97215ece8913e5a2c05ec07 Mon Sep 17 00:00:00 2001 From: Spencer Thomason Date: Wed, 27 Jan 2016 19:54:47 -0800 Subject: [PATCH] Allow Solaris privileges to work on both Solaris and derivatives Solaris does not have PRIV_PROC_PRIOUP but SmartOS does. This allows fallback to this privilege on supported platforms FS-8195 #resolve --- src/switch_core.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/switch_core.c b/src/switch_core.c index 2d342fb33b..259807a287 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -982,24 +982,30 @@ SWITCH_DECLARE(int32_t) set_realtime_priority(void) #ifdef SOLARIS_PRIVILEGES /* request the privileges to elevate the priority */ if (priv_set(PRIV_ON, PRIV_EFFECTIVE, PRIV_PROC_PRIOCNTL, NULL) < 0) { +#ifdef PRIV_PROC_PRIOUP + /* fallback to PRIV_PROC_PRIOUP on SmartOS */ fprintf(stderr, "WARN: Failed to acquire proc_priocntl privilege (%s)\n", strerror(errno)); - } else { - if (sched_setscheduler(0, SCHED_FIFO, &sched) < 0) { - fprintf(stderr, "ERROR: Failed to set SCHED_FIFO scheduler (%s)\n", strerror(errno)); - } else { - return 0; - } - } - - if (priv_set(PRIV_ON, PRIV_EFFECTIVE, PRIV_PROC_PRIOUP, NULL) < 0) { - fprintf(stderr, "ERROR: Failed to acquire proc_prioup privilege (%s)\n", strerror(errno)); - return -1; - } else { - if (setpriority(PRIO_PROCESS, 0, -10) < 0) { - fprintf(stderr, "ERROR: Could not set nice level\n"); + if (priv_set(PRIV_ON, PRIV_EFFECTIVE, PRIV_PROC_PRIOUP, NULL) < 0) { + fprintf(stderr, "ERROR: Failed to acquire proc_prioup privilege (%s)\n", strerror(errno)); return -1; } +#else + fprintf(stderr, "ERROR: Failed to acquire proc_priocntl privilege (%s)\n", strerror(errno)); + return -1; +#endif } + + if (sched_setscheduler(0, SCHED_FIFO, &sched) < 0) { + fprintf(stderr, "WARN: Failed to set SCHED_FIFO scheduler (%s)\n", strerror(errno)); + } else { + return 0; + } + + if (setpriority(PRIO_PROCESS, 0, -10) < 0) { + fprintf(stderr, "ERROR: Could not set nice level\n"); + return -1; + } + return 0; #else