- Realtime Scheduling for RTP proxy
This commit is contained in:
parent
b98a0f08f0
commit
f409950b8e
@ -1,5 +1,6 @@
|
|||||||
0.5.5
|
0.5.5
|
||||||
=====
|
=====
|
||||||
|
4-Apr-2004: - Realtime Scheduling for RTP proxy
|
||||||
3-Apr-2004: - fix: SDP 'c=' items in media part
|
3-Apr-2004: - fix: SDP 'c=' items in media part
|
||||||
2-Apr-2004: - PID file
|
2-Apr-2004: - PID file
|
||||||
31-Mar-2004: - accessctl.c: text correction in ERROR output
|
31-Mar-2004: - accessctl.c: text correction in ERROR output
|
||||||
|
|||||||
@ -84,12 +84,21 @@
|
|||||||
/* Define if you have POSIX threads libraries and header files. */
|
/* Define if you have POSIX threads libraries and header files. */
|
||||||
#undef HAVE_PTHREAD
|
#undef HAVE_PTHREAD
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `pthread_setschedparam' function. */
|
||||||
|
#undef HAVE_PTHREAD_SETSCHEDPARAM
|
||||||
|
|
||||||
/* Define to 1 if you have the <pwd.h> header file. */
|
/* Define to 1 if you have the <pwd.h> header file. */
|
||||||
#undef HAVE_PWD_H
|
#undef HAVE_PWD_H
|
||||||
|
|
||||||
/* Define to 1 if you have the `read' function. */
|
/* Define to 1 if you have the `read' function. */
|
||||||
#undef HAVE_READ
|
#undef HAVE_READ
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sched_get_priority_max' function. */
|
||||||
|
#undef HAVE_SCHED_GET_PRIORITY_MAX
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `sched_get_priority_min' function. */
|
||||||
|
#undef HAVE_SCHED_GET_PRIORITY_MIN
|
||||||
|
|
||||||
/* Define to 1 if you have the `select' function. */
|
/* Define to 1 if you have the `select' function. */
|
||||||
#undef HAVE_SELECT
|
#undef HAVE_SELECT
|
||||||
|
|
||||||
|
|||||||
@ -335,6 +335,9 @@ AC_CHECK_FUNCS(hstrerror,,AC_CHECK_LIB(resolv,hstrerror,[
|
|||||||
AC_DEFINE_UNQUOTED(HAVE_HSTRERROR)
|
AC_DEFINE_UNQUOTED(HAVE_HSTRERROR)
|
||||||
LIBS="$LIBS -lresolv"]))
|
LIBS="$LIBS -lresolv"]))
|
||||||
AC_CHECK_FUNCS(inet_pton inet_ntop inet_aton inet_ntoa)
|
AC_CHECK_FUNCS(inet_pton inet_ntop inet_aton inet_ntoa)
|
||||||
|
AC_CHECK_FUNCS(pthread_setschedparam sched_get_priority_min)
|
||||||
|
AC_CHECK_FUNCS(sched_get_priority_max)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
Siproxd is distributed in the hope that it will be useful,
|
Siproxd is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warrantry of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
@ -32,6 +32,10 @@
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_PTHREAD_SETSCHEDPARAM
|
||||||
|
#include <sched.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <osipparser2/osip_parser.h>
|
#include <osipparser2/osip_parser.h>
|
||||||
|
|
||||||
#include "siproxd.h"
|
#include "siproxd.h"
|
||||||
@ -103,6 +107,35 @@ int rtp_relay_init( void ) {
|
|||||||
sts=pthread_create(&rtpproxy_tid, NULL, rtpproxy_main, (void *)&arg);
|
sts=pthread_create(&rtpproxy_tid, NULL, rtpproxy_main, (void *)&arg);
|
||||||
DEBUGC(DBCLASS_RTP,"created, sts=%i", sts);
|
DEBUGC(DBCLASS_RTP,"created, sts=%i", sts);
|
||||||
|
|
||||||
|
/* set realtime scheduling - if started by root */
|
||||||
|
#ifdef HAVE_PTHREAD_SETSCHEDPARAM
|
||||||
|
{
|
||||||
|
int uid,euid;
|
||||||
|
struct sched_param schedparam;
|
||||||
|
|
||||||
|
uid=getuid();
|
||||||
|
euid=geteuid();
|
||||||
|
if (uid != euid) seteuid(0);
|
||||||
|
|
||||||
|
if (geteuid()==0) {
|
||||||
|
int pmin, pmax;
|
||||||
|
/* place ourself at 1/3 of the available priority space */
|
||||||
|
pmin=sched_get_priority_min(SCHED_RR);
|
||||||
|
pmax=sched_get_priority_max(SCHED_RR);
|
||||||
|
schedparam.sched_priority=pmin+(pmax-pmin)/3;
|
||||||
|
DEBUGC(DBCLASS_RTP,"pmin=%i, pmax=%i, using p=%i", pmin, pmax,
|
||||||
|
schedparam.sched_priority);
|
||||||
|
sts=pthread_setschedparam(rtpproxy_tid, SCHED_RR, &schedparam);
|
||||||
|
if (sts != 0) {
|
||||||
|
ERROR("pthread_setschedparam failed: %s", strerror(errno));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
WARN("Cannot set realtime scheduling for RTP (start siproxd as root)");
|
||||||
|
}
|
||||||
|
if (uid != euid) seteuid(euid);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return STS_SUCCESS;
|
return STS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user