summaryrefslogtreecommitdiffstats
path: root/tools/omfile.c
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2010-03-05 09:54:42 +0100
committerRainer Gerhards <rgerhards@adiscon.com>2010-03-05 09:54:42 +0100
commit40be6cb6e7a167402039d24e047c94bdb19bd22e (patch)
treea254249ee29f09c88ee82990d2049ede0ffabb07 /tools/omfile.c
parent424de9fb94725769cfcbb0f0a5937781376c4e73 (diff)
parent396e211e5cfd195b7135947d425b089a0447fa88 (diff)
downloadrsyslog-40be6cb6e7a167402039d24e047c94bdb19bd22e.tar.gz
rsyslog-40be6cb6e7a167402039d24e047c94bdb19bd22e.tar.xz
rsyslog-40be6cb6e7a167402039d24e047c94bdb19bd22e.zip
Merge branch 'v4-stable-solaris' into master-solaris
Conflicts: ChangeLog configure.ac doc/manual.html tests/rt-init.c
Diffstat (limited to 'tools/omfile.c')
-rw-r--r--tools/omfile.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/tools/omfile.c b/tools/omfile.c
index 1f203852..9562e9cf 100644
--- a/tools/omfile.c
+++ b/tools/omfile.c
@@ -364,6 +364,7 @@ dynaFileFreeCacheEntries(instanceData *pData)
for(i = 0 ; i < pData->iCurrCacheSize ; ++i) {
dynaFileDelCacheEntry(pData->dynCache, i, 1);
}
+ pData->iCurrElt = -1; /* invalidate current element */
ENDfunc;
}
@@ -547,6 +548,14 @@ prepareDynFile(instanceData *pData, uchar *newFileName, unsigned iMsgOpts)
}
/* we have not found an entry */
+
+ /* invalidate iCurrElt as we may error-exit out of this function when the currrent
+ * iCurrElt has been freed or otherwise become unusable. This is a precaution, and
+ * performance-wise it may be better to do that in each of the exits. However, that
+ * is error-prone, so I prefer to do it here. -- rgerhards, 2010-03-02
+ */
+ pData->iCurrElt = -1;
+
if(iFirstFree == -1 && (pData->iCurrCacheSize < pData->iDynaFileCacheSize)) {
/* there is space left, so set it to that index */
iFirstFree = pData->iCurrCacheSize++;
@@ -578,7 +587,11 @@ prepareDynFile(instanceData *pData, uchar *newFileName, unsigned iMsgOpts)
ABORT_FINALIZE(localRet);
}
- CHKmalloc(pCache[iFirstFree]->pName = ustrdup(newFileName));
+ if((pCache[iFirstFree]->pName = ustrdup(newFileName)) == NULL) {
+ /* we need to discard the entry, otherwise things could lead to a segfault! */
+ dynaFileDelCacheEntry(pCache, iFirstFree, 1);
+ ABORT_FINALIZE(RS_RET_OUT_OF_MEMORY);
+ }
pCache[iFirstFree]->pStrm = pData->pStrm;
pCache[iFirstFree]->clkTickAccessed = getClockFileAccess();
pData->iCurrElt = iFirstFree;
@@ -831,7 +844,6 @@ BEGINdoHUP
CODESTARTdoHUP
if(pData->bDynamicName) {
dynaFileFreeCacheEntries(pData);
- pData->iCurrElt = -1; /* invalidate current element */
} else {
if(pData->pStrm != NULL) {
strm.Destruct(&pData->pStrm);