From b40c83090e7146a0709657b3ad15f806c51f5f83 Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Wed, 19 Sep 2012 18:57:02 +0200 Subject: bugfix: potential abort, if action queue could not be properly started This most importantly could happen due to configuration errors. --- ChangeLog | 2 ++ action.c | 17 ++++++++++++++++- action.h | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index b4014983..e5cc879c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ --------------------------------------------------------------------------- Version 6.4.2 [V6-STABLE] 2012-09-?? +- bugfix: potential abort, if action queue could not be properly started + This most importantly could happen due to configuration errors. - bugfix: remove invalid socket option call from imuxsock Thanks to Cristian Ionescu-Idbohrn and Jonny Törnbom - bugfix: missing support for escape sequences in RainerScript diff --git a/action.c b/action.c index bf016363..2af4bf96 100644 --- a/action.c +++ b/action.c @@ -1341,12 +1341,18 @@ doSubmitToActionQ(action_t *pAction, msg_t *pMsg) { DEFiRet; + if(pAction->eState == ACT_STATE_DIED) { + DBGPRINTF("action %p died, do NOT execute\n", pAction); + FINALIZE; + } + STATSCOUNTER_INC(pAction->ctrProcessed, pAction->mutCtrProcessed); if(pAction->pQueue->qType == QUEUETYPE_DIRECT) iRet = qqueueEnqObjDirect(pAction->pQueue, (void*) MsgAddRef(pMsg)); else iRet = qqueueEnqObj(pAction->pQueue, eFLOWCTL_NO_DELAY, (void*) MsgAddRef(pMsg)); +finalize_it: RETiRet; } @@ -1551,9 +1557,18 @@ finalize_it: */ DEFFUNC_llExecFunc(doActivateActions) { + rsRetVal localRet; action_t *pThis = (action_t*) pData; BEGINfunc - qqueueStart(pThis->pQueue); + localRet = qqueueStart(pThis->pQueue); + if(localRet != RS_RET_OK) { + errmsg.LogError(0, localRet, "error starting up action queue"); + if(localRet == RS_RET_FILE_PREFIX_MISSING) { + errmsg.LogError(0, localRet, "file prefix (work directory?) " + "is missing"); + } + actionDisable(pThis); + } DBGPRINTF("Action %p: queue %p started\n", pThis, pThis->pQueue); ENDfunc return RS_RET_OK; /* we ignore errors, we can not do anything either way */ diff --git a/action.h b/action.h index 5f142b00..b4edcbbd 100644 --- a/action.h +++ b/action.h @@ -36,7 +36,7 @@ extern int glbliActionResumeRetryCount; typedef enum { - ACT_STATE_DIED = 0, /* action permanently failed and now disabled - MUST BE ZEO! */ + ACT_STATE_DIED = 0, /* action permanently failed and now disabled - MUST BE ZERO! */ ACT_STATE_RDY = 1, /* action ready, waiting for new transaction */ ACT_STATE_ITX = 2, /* transaction active, waiting for new data or commit */ ACT_STATE_COMM = 3, /* transaction finished (a transient state) */ -- cgit v1.2.3