mirror of
https://github.com/rsyslog/rsyslog.git
synced 2025-12-18 19:10:42 +01:00
bugfix: memory leak in imtcp & subsystems under some circumstances
This leak is tied to error conditions which lead to incorrect cleanup of some data structures. Note: this is a backport from v6. In v5, we currently do not have the toolchain to verify the original problem and that it is solved. So this patch is preliminary and subject to change as work progresses.
This commit is contained in:
parent
2b5a7f10f5
commit
2c81df12bc
@ -1,4 +1,9 @@
|
||||
---------------------------------------------------------------------------
|
||||
Version 5.8.2 [V5-stable] (rgerhards), 2011-06-??
|
||||
- bugfix: memory leak in imtcp & subsystems under some circumstances
|
||||
This leak is tied to error conditions which lead to incorrect cleanup
|
||||
of some data structures. [backport from v6]
|
||||
---------------------------------------------------------------------------
|
||||
Version 5.8.1 [V5-stable] (rgerhards), 2011-05-19
|
||||
- bugfix: invalid processing in QUEUE_FULL condition
|
||||
If the the multi-submit interface was used and a QUEUE_FULL condition
|
||||
|
||||
@ -177,6 +177,7 @@ doRetry(nsd_gtls_t *pNsd)
|
||||
finalize_it:
|
||||
if(iRet != RS_RET_OK && iRet != RS_RET_CLOSED && iRet != RS_RET_RETRY)
|
||||
pNsd->bAbortConn = 1; /* request abort */
|
||||
dbgprintf("XXXXXX: doRetry: iRet %d, pNsd->bAbortConn %d\n", iRet, pNsd->bAbortConn);
|
||||
RETiRet;
|
||||
}
|
||||
|
||||
|
||||
9
tcpsrv.c
9
tcpsrv.c
@ -556,6 +556,7 @@ RunSelect(tcpsrv_t *pThis)
|
||||
int bIsReady;
|
||||
tcps_sess_t *pNewSess;
|
||||
nssel_t *pSel = NULL;
|
||||
rsRetVal localRet;
|
||||
|
||||
ISOBJ_TYPE_assert(pThis, tcpsrv);
|
||||
|
||||
@ -604,8 +605,8 @@ RunSelect(tcpsrv_t *pThis)
|
||||
while(nfds && iTCPSess != -1) {
|
||||
if(glbl.GetGlobalInputTermState() == 1)
|
||||
ABORT_FINALIZE(RS_RET_FORCE_TERM);
|
||||
CHKiRet(nssel.IsReady(pSel, pThis->pSessions[iTCPSess]->pStrm, NSDSEL_RD, &bIsReady, &nfds));
|
||||
if(bIsReady) {
|
||||
localRet = nssel.IsReady(pSel, pThis->pSessions[iTCPSess]->pStrm, NSDSEL_RD, &bIsReady, &nfds);
|
||||
if(bIsReady || localRet != RS_RET_OK) {
|
||||
doReceive(pThis, &pThis->pSessions[iTCPSess], NULL);
|
||||
--nfds; /* indicate we have processed one */
|
||||
}
|
||||
@ -618,7 +619,9 @@ finalize_it: /* this is a very special case - this time only we do not exit the
|
||||
* crashed, which made sense (the rest of the engine was not prepared for
|
||||
* that) -- rgerhards, 2008-05-19
|
||||
*/
|
||||
/*EMPTY*/;
|
||||
if(pSel != NULL) { /* cleanup missing? happens during err exit! */
|
||||
nssel.Destruct(&pSel);
|
||||
}
|
||||
}
|
||||
|
||||
/* note that this point is usually not reached */
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user