summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2009-10-12 17:10:04 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2009-10-12 17:10:04 +0200
commit08fca4477cf525cada8c66d309ea1daa2eac88b2 (patch)
treee02ef89a43306ea6cbfddb129e5987d566aab419
parent8e60b2daa653b33ac244c8cb1ae4219df9ef414c (diff)
downloadrsyslog-08fca4477cf525cada8c66d309ea1daa2eac88b2.tar.gz
rsyslog-08fca4477cf525cada8c66d309ea1daa2eac88b2.tar.xz
rsyslog-08fca4477cf525cada8c66d309ea1daa2eac88b2.zip
re-enabled input thread termination handling that does avoid thread cancellation
...where possible. This provides a more reliable mode of rsyslogd termination (canceling threads my result in not properly freed resouces and potential later hangs, even though we perform proper cancel handling in our code). This is part of an effort to reduce thread cnacellation as much as possible in rsyslog. NOTE: some comments indicated that there were problems with some code that has been re-activated. Testing did not show any issues. My current assumption is that these issues were related to some other code that has been removed/changed during the previous restructuring events. In any case, if there is a shutdown issue, one should carefully look at this change here!
-rw-r--r--ChangeLog12
-rw-r--r--plugins/imudp/imudp.c6
-rw-r--r--threads.c5
3 files changed, 18 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 8e1e025d..3341bf8f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,18 @@ Version 5.3.1 [DEVEL] (rgerhards), 2009-10-05
- added $AbortOnUncleanConfig directive - permits to prevent startup when
there are problems with the configuration file. See it's doc for
details.
+- re-enabled input thread termination handling that does avoid thread
+ cancellation where possible. This provides a more reliable mode of
+ rsyslogd termination (canceling threads my result in not properly
+ freed resouces and potential later hangs, even though we perform
+ proper cancel handling in our code). This is part of an effort to
+ reduce thread cnacellation as much as possible in rsyslog.
+ NOTE: some comments indicated that there were problems with some code
+ that has been re-activated. Testing did not show any issues. My current
+ assumption is that these issues were related to some other code that
+ has been removed/changed during the previous restructuring events.
+ In any case, if there is a shutdown issue, one should carefully look
+ at this change here!
- some cleanup/slight improvement:
* changed imuxsock to no longer use deprecated submitAndParseMsg() IF
* changed submitAndParseMsg() interface to be a wrapper around the new
diff --git a/plugins/imudp/imudp.c b/plugins/imudp/imudp.c
index 735042a4..a1484e7f 100644
--- a/plugins/imudp/imudp.c
+++ b/plugins/imudp/imudp.c
@@ -336,6 +336,9 @@ rsRetVal rcvMainLoop()
nfds = epoll_wait(efd, currEvt, NUM_EPOLL_EVENTS, -1);
DBGPRINTF("imudp: epoll_wait() returned with %d fds\n", nfds);
+ if(glbl.GetGlobalInputTermState() == 1)
+ break; /* terminate input! */
+
for(i = 0 ; i < nfds ; ++i) {
processSocket(currEvt[i].data.fd, &frominetPrev, &bIsPermitted,
fromHost, fromHostFQDN, fromHostIP);
@@ -343,6 +346,9 @@ rsRetVal rcvMainLoop()
}
finalize_it:
+ if(udpEPollEvt != NULL)
+ free(udpEPollEvt);
+
RETiRet;
}
#else /* #if HAVE_EPOLL_CREATE1 */
diff --git a/threads.c b/threads.c
index 05e6159f..a6cbc2ff 100644
--- a/threads.c
+++ b/threads.c
@@ -92,19 +92,14 @@ rsRetVal thrdTerminate(thrdInfo_t *pThis)
DEFiRet;
assert(pThis != NULL);
-#if 0 // TODO: somehow does not really work yet!
if(pThis->bNeedsCancel) {
-#endif
DBGPRINTF("request term via canceling for input thread 0x%x\n", (unsigned) pThis->thrdID);
pthread_cancel(pThis->thrdID);
-#if 0 // TODO: somehow does not really work yet!
- if(pThis->bNeedsCancel) {
} else {
DBGPRINTF("request term via SIGTTIN for input thread 0x%x\n", (unsigned) pThis->thrdID);
pthread_kill(pThis->thrdID, SIGTTIN);
}
-#endif
pthread_join(pThis->thrdID, NULL); /* wait for input thread to complete */
pThis->bIsActive = 0;