summaryrefslogtreecommitdiff
path: root/plugins/imdiag
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2011-07-11 11:44:16 +0200
committerMichael Biebl <biebl@debian.org>2011-07-11 11:44:16 +0200
commit6b2af45bc8b2aa4292e3cf92986c01a728ef4d8c (patch)
tree15c4d4604294a232bf1126f969318ed659b2dc52 /plugins/imdiag
parentd5294b644649f563f4aa77735ebc6db6ee1776de (diff)
downloadrsyslog-6b2af45bc8b2aa4292e3cf92986c01a728ef4d8c.tar.gz
Imported Upstream version 5.8.3upstream/5.8.3
Diffstat (limited to 'plugins/imdiag')
-rw-r--r--plugins/imdiag/imdiag.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/plugins/imdiag/imdiag.c b/plugins/imdiag/imdiag.c
index ed6ef50..912c7bb 100644
--- a/plugins/imdiag/imdiag.c
+++ b/plugins/imdiag/imdiag.c
@@ -255,6 +255,8 @@ finalize_it:
/* This function waits until the main queue is drained (size = 0)
+ * To make sure it really is drained, we check three times. Otherwise we
+ * may just see races.
*/
static rsRetVal
waitMainQEmpty(tcps_sess_t *pSess)
@@ -264,19 +266,22 @@ waitMainQEmpty(tcps_sess_t *pSess)
DEFiRet;
CHKiRet(diagGetMainMsgQSize(&iMsgQueueSize));
- while(iMsgQueueSize > 0) {
- /* DEV DEBUG ONLY if(iPrint++ % 500)
- printf("imdiag: main msg queue size: %d\n", iMsgQueueSize);
- */
- if(iPrint++ % 500 == 0)
- dbgprintf("imdiag sleeping, wait mainq drain, curr size %d\n", iMsgQueueSize);
- srSleep(0,2); /* wait a little bit */
- CHKiRet(diagGetMainMsgQSize(&iMsgQueueSize));
+ while(1) {
if(iMsgQueueSize == 0) {
/* verify that queue is still empty (else it could just be a race!) */
- srSleep(1,5); /* wait a little bit */
+ srSleep(0,250000);/* wait a little bit */
CHKiRet(diagGetMainMsgQSize(&iMsgQueueSize));
+ if(iMsgQueueSize == 0) {
+ srSleep(0,500000);/* wait a little bit */
+ CHKiRet(diagGetMainMsgQSize(&iMsgQueueSize));
+ }
}
+ if(iMsgQueueSize == 0)
+ break;
+ if(iPrint++ % 500 == 0)
+ dbgprintf("imdiag sleeping, wait mainq drain, curr size %d\n", iMsgQueueSize);
+ srSleep(0,200000);/* wait a little bit */
+ CHKiRet(diagGetMainMsgQSize(&iMsgQueueSize));
}
CHKiRet(sendResponse(pSess, "mainqueue empty\n"));