summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2009-03-18 17:55:15 +0100
committerRainer Gerhards <rgerhards@adiscon.com>2009-03-18 17:55:15 +0100
commit27a639ed8875969574543f7738c7bcb14c6149d2 (patch)
tree5cd29af194fba23b765476a0f4897d6d08cf3f7c /tools
parent7268b9bc5b8a7d4ea58cbec7fb6180574e2b20d6 (diff)
downloadrsyslog-27a639ed8875969574543f7738c7bcb14c6149d2.tar.gz
rsyslog-27a639ed8875969574543f7738c7bcb14c6149d2.tar.xz
rsyslog-27a639ed8875969574543f7738c7bcb14c6149d2.zip
omfile bugfixing
- fixed a bug that caused action retries not to work correctly situation was only cleared by a restart - bugfix: closed dynafile was potentially never written until another dynafile name was generated - potential loss of messages
Diffstat (limited to 'tools')
-rw-r--r--tools/omfile.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/tools/omfile.c b/tools/omfile.c
index 8be815f2..bf84d1a7 100644
--- a/tools/omfile.c
+++ b/tools/omfile.c
@@ -457,6 +457,8 @@ static int prepareDynFile(instanceData *pData, uchar *newFileName, unsigned iMsg
int i;
int iFirstFree;
dynaFileCacheEntry **pCache;
+
+ BEGINfunc
ASSERT(pData != NULL);
ASSERT(newFileName != NULL);
@@ -542,6 +544,8 @@ static int prepareDynFile(instanceData *pData, uchar *newFileName, unsigned iMsg
pData->iCurrElt = iFirstFree;
DBGPRINTF("Added new entry %d for file cache, file '%s'.\n", iFirstFree, newFileName);
+ ENDfunc
+
return 0;
}
@@ -553,6 +557,7 @@ static int prepareDynFile(instanceData *pData, uchar *newFileName, unsigned iMsg
static rsRetVal writeFile(uchar **ppString, unsigned iMsgOpts, instanceData *pData)
{
off_t actualFileSize;
+ int iLenWritten;
DEFiRet;
ASSERT(pData != NULL);
@@ -563,7 +568,9 @@ static rsRetVal writeFile(uchar **ppString, unsigned iMsgOpts, instanceData *pDa
if(pData->bDynamicName) {
if(prepareDynFile(pData, ppString[1], iMsgOpts) != 0)
ABORT_FINALIZE(RS_RET_SUSPENDED); // TODO: different state? conditional based on what went wrong? 2009-03-11
- } else if(pData->fd == -1) {
+ }
+
+ if(pData->fd == -1) {
prepareFile(pData, pData->f_fname);
}
@@ -600,16 +607,21 @@ again:
}
}
- if(write(pData->fd, ppString[0], strlen((char*)ppString[0])) < 0) {
+ iLenWritten = write(pData->fd, ppString[0], strlen((char*)ppString[0]));
+//dbgprintf("lenwritten: %d\n", iLenWritten);
+ if(iLenWritten < 0) {
int e = errno;
-dbgprintf("++++++++++ log file writer error %d\n", e);
+ char errStr[1024];
+ rs_strerror_r(errno, errStr, sizeof(errStr));
+ DBGPRINTF("log file (%d) write error %d: %s\n", pData->fd, e, errStr);
/* If a named pipe is full, just ignore it for now
- mrn 24 May 96 */
- if (pData->fileType == eTypePIPE && e == EAGAIN)
+ if(pData->fileType == eTypePIPE && e == EAGAIN)
ABORT_FINALIZE(RS_RET_SUSPENDED);
(void) close(pData->fd);
+ pData->fd = -1; /* tell that fd is no longer open! */
/* Check for EBADF on TTY's due to vhangup()
* Linux uses EIO instead (mrn 12 May 96)
*/