summaryrefslogtreecommitdiffstats
path: root/runtime/rsyslog.c
diff options
context:
space:
mode:
authorDražen Kačar <dave@fly.srk.fer.hr>2011-01-10 12:39:23 +0100
committerRainer Gerhards <rgerhards@adiscon.com>2011-01-10 12:39:23 +0100
commit7742b2182fc017ca4c9fcfe3b26f4c8d68a9bd58 (patch)
tree5105b0ff2a8ea76a0729d57111545e5858124daf /runtime/rsyslog.c
parentc4026ec0f8d843540d01b07f94d4182d7dddb62e (diff)
downloadrsyslog-7742b2182fc017ca4c9fcfe3b26f4c8d68a9bd58.tar.gz
rsyslog-7742b2182fc017ca4c9fcfe3b26f4c8d68a9bd58.tar.xz
rsyslog-7742b2182fc017ca4c9fcfe3b26f4c8d68a9bd58.zip
improved imudp real-time scheduling support & bugfix
The original code had quite some issues, which are fixed by this commit. Also we do more error checking now. Signed-off-by: Rainer Gerhards <rgerhards@adiscon.com>
Diffstat (limited to 'runtime/rsyslog.c')
-rw-r--r--runtime/rsyslog.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/runtime/rsyslog.c b/runtime/rsyslog.c
index a9794840..2722fd6c 100644
--- a/runtime/rsyslog.c
+++ b/runtime/rsyslog.c
@@ -84,6 +84,12 @@
#include "strgen.h"
#include "atomic.h"
+#ifdef HAVE_PTHREAD_SETSCHEDPARAM
+struct sched_param default_sched_param;
+pthread_attr_t default_thread_attr;
+int default_thr_sched_policy;
+#endif
+
/* forward definitions */
static rsRetVal dfltErrLogger(int, uchar *errMsg);
@@ -138,6 +144,18 @@ rsrtInit(char **ppErrObj, obj_if_t *pObjIF)
if(iRefCount == 0) {
/* init runtime only if not yet done */
+#ifdef HAVE_PTHREAD_SETSCHEDPARAM
+ CHKiRet(pthread_getschedparam(pthread_self(),
+ &default_thr_sched_policy,
+ &default_sched_param));
+ CHKiRet(pthread_attr_init(&default_thread_attr));
+ CHKiRet(pthread_attr_setschedpolicy(&default_thread_attr,
+ default_thr_sched_policy));
+ CHKiRet(pthread_attr_setschedparam(&default_thread_attr,
+ &default_sched_param));
+ CHKiRet(pthread_attr_setinheritsched(&default_thread_attr,
+ PTHREAD_EXPLICIT_SCHED));
+#endif
if(ppErrObj != NULL) *ppErrObj = "obj";
CHKiRet(objClassInit(NULL)); /* *THIS* *MUST* always be the first class initilizer being called! */
CHKiRet(objGetObjInterface(pObjIF)); /* this provides the root pointer for all other queries */