diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2009-10-16 09:18:51 +0200 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2009-10-16 09:18:51 +0200 |
commit | f3884d52628b4e43425adad3826c9e324cd60291 (patch) | |
tree | 50491e3758123b90c5f097c5416ab432f6b38f94 /plugins | |
parent | ba475a90cf877977be67ebb72fa844f36f338f1d (diff) | |
download | rsyslog-f3884d52628b4e43425adad3826c9e324cd60291.tar.gz rsyslog-f3884d52628b4e43425adad3826c9e324cd60291.tar.xz rsyslog-f3884d52628b4e43425adad3826c9e324cd60291.zip |
ensure proper imudp shutdown even on a very busy system
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/imudp/imudp.c | 12 | ||||
-rw-r--r-- | plugins/omtesting/omtesting.c | 1 |
2 files changed, 8 insertions, 5 deletions
diff --git a/plugins/imudp/imudp.c b/plugins/imudp/imudp.c index 59d23adb..5a1d9e8b 100644 --- a/plugins/imudp/imudp.c +++ b/plugins/imudp/imudp.c @@ -198,7 +198,7 @@ finalize_it: * on scheduling order. -- rgerhards, 2008-10-02 */ static inline rsRetVal -processSocket(int fd, struct sockaddr_storage *frominetPrev, int *pbIsPermitted, +processSocket(thrdInfo_t *pThrd, int fd, struct sockaddr_storage *frominetPrev, int *pbIsPermitted, uchar *fromHost, uchar *fromHostFQDN, uchar *fromHostIP, ruleset_t *pRuleset) { DEFiRet; @@ -213,8 +213,11 @@ processSocket(int fd, struct sockaddr_storage *frominetPrev, int *pbIsPermitted, prop_t *propFromHostIP = NULL; char errStr[1024]; + assert(pThrd != NULL); iNbrTimeUsed = 0; while(1) { /* loop is terminated if we have a bad receive, done below in the body */ + if(pThrd->bShallStop == TRUE) + ABORT_FINALIZE(RS_RET_FORCE_TERM); socklen = sizeof(struct sockaddr_storage); lenRcvBuf = recvfrom(fd, (char*) pRcvBuf, iMaxLine, 0, (struct sockaddr *)&frominet, &socklen); if(lenRcvBuf < 0) { @@ -259,8 +262,7 @@ processSocket(int fd, struct sockaddr_storage *frominetPrev, int *pbIsPermitted, } } - //DBGPRINTF("recv(%d,%d)/%s,acl:%d,msg:%.80s\n", fd, (int) lenRcvBuf, fromHost, *pbIsPermitted, pRcvBuf); - DBGPRINTF("recv(%d,%d)/%s,acl:%d,msg:%s\n", fd, (int) lenRcvBuf, fromHost, *pbIsPermitted, pRcvBuf); + DBGPRINTF("recv(%d,%d)/%s,acl:%d,msg:%.80s\n", fd, (int) lenRcvBuf, fromHost, *pbIsPermitted, pRcvBuf); if(*pbIsPermitted) { if((iTimeRequery == 0) || (iNbrTimeUsed++ % iTimeRequery) == 0) { @@ -355,7 +357,7 @@ rsRetVal rcvMainLoop(thrdInfo_t *pThrd) break; /* terminate input! */ for(i = 0 ; i < nfds ; ++i) { - processSocket(udpLstnSocks[currEvt[i].data.u64], &frominetPrev, &bIsPermitted, + processSocket(pThrd, udpLstnSocks[currEvt[i].data.u64], &frominetPrev, &bIsPermitted, fromHost, fromHostFQDN, fromHostIP, udpRulesets[currEvt[i].data.u64]); } } @@ -422,7 +424,7 @@ rsRetVal rcvMainLoop(thrdInfo_t *pThrd) for(i = 0; nfds && i < *udpLstnSocks; i++) { if(FD_ISSET(udpLstnSocks[i+1], &readfds)) { - processSocket(udpLstnSocks[i+1], &frominetPrev, &bIsPermitted, + processSocket(pThrd, udpLstnSocks[i+1], &frominetPrev, &bIsPermitted, fromHost, fromHostFQDN, fromHostIP, udpRulesets[i+1]); --nfds; /* indicate we have processed one descriptor */ } diff --git a/plugins/omtesting/omtesting.c b/plugins/omtesting/omtesting.c index 8f6cdbe5..9442f691 100644 --- a/plugins/omtesting/omtesting.c +++ b/plugins/omtesting/omtesting.c @@ -53,6 +53,7 @@ #include "dirty.h" #include "syslogd-types.h" #include "module-template.h" +#include "conf.h" #include "cfsysline.h" MODULE_TYPE_OUTPUT |