From: Spencer Thomason Date: Thu, 28 Jan 2016 03:54:47 +0000 (-0800) Subject: Allow Solaris privileges to work on both Solaris and derivatives X-Git-Tag: v1.6.7~2^2~120^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4b9bf111d76495b0f97215ece8913e5a2c05ec07;p=thirdparty%2Ffreeswitch.git 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 --- 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; } - } - - 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)); +#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 { - if (setpriority(PRIO_PROCESS, 0, -10) < 0) { - fprintf(stderr, "ERROR: Could not set nice level\n"); - return -1; - } + return 0; } + + if (setpriority(PRIO_PROCESS, 0, -10) < 0) { + fprintf(stderr, "ERROR: Could not set nice level\n"); + return -1; + } + return 0; #else