summaryrefslogtreecommitdiffstats
path: root/runtime/wtp.c
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2008-10-22 13:54:40 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2008-10-22 13:54:40 +0200
commitcf38fc81759b01af5125b1a05e0d6fe8e2e1bc21 (patch)
tree534bfa946536dd45f3127912f268ee960c6a3285 /runtime/wtp.c
parentb6f496f8619b02c50d3f5ced34eff279244b6e9b (diff)
downloadrsyslog-cf38fc81759b01af5125b1a05e0d6fe8e2e1bc21.tar.gz
rsyslog-cf38fc81759b01af5125b1a05e0d6fe8e2e1bc21.tar.xz
rsyslog-cf38fc81759b01af5125b1a05e0d6fe8e2e1bc21.zip
added a setting "$OptimizeForUniprocessor"
...to enable users to turn off pthread_yield calls which are counter-productive on multiprocessor machines (but have been shown to be useful on uniprocessors)
Diffstat (limited to 'runtime/wtp.c')
-rw-r--r--runtime/wtp.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/runtime/wtp.c b/runtime/wtp.c
index 45034fa7..06173e04 100644
--- a/runtime/wtp.c
+++ b/runtime/wtp.c
@@ -46,9 +46,11 @@
#include "wtp.h"
#include "wti.h"
#include "obj.h"
+#include "glbl.h"
/* static data */
DEFobjStaticHelpers
+DEFobjCurrIf(glbl)
/* forward-definitions */
@@ -75,6 +77,7 @@ static rsRetVal NotImplementedDummy() { return RS_RET_OK; }
/* Standard-Constructor for the wtp object
*/
BEGINobjConstruct(wtp) /* be sure to specify the object type also in END macro! */
+ pThis->bOptimizeUniProc = glbl.GetOptimizeUniProc();
pthread_mutex_init(&pThis->mut, NULL);
pthread_cond_init(&pThis->condThrdTrm, NULL);
/* set all function pointers to "not implemented" dummy so that we can safely call them */
@@ -484,7 +487,8 @@ wtpStartWrkr(wtp_t *pThis, int bLockMutex)
* hold the queue's mutex, but at least it has a chance to start on a single-CPU system.
*/
# if !defined(__hpux) /* pthread_yield is missing there! */
- pthread_yield();
+ if(pThis->bOptimizeUniProc)
+ pthread_yield();
# endif
/* indicate we just started a worker and would like to see it running */
@@ -617,12 +621,22 @@ finalize_it:
/* dummy */
rsRetVal wtpQueryInterface(void) { return RS_RET_NOT_IMPLEMENTED; }
+/* exit our class
+ */
+BEGINObjClassExit(wtp, OBJ_IS_CORE_MODULE) /* CHANGE class also in END MACRO! */
+CODESTARTObjClassExit(nsdsel_gtls)
+ /* release objects we no longer need */
+ objRelease(glbl, CORE_COMPONENT);
+ENDObjClassExit(wtp)
+
+
/* Initialize the stream class. Must be called as the very first method
* before anything else is called inside this class.
* rgerhards, 2008-01-09
*/
BEGINObjClassInit(wtp, 1, OBJ_IS_CORE_MODULE)
/* request objects we use */
+ CHKiRet(objUse(glbl, CORE_COMPONENT));
ENDObjClassInit(wtp)
/*