diff options
-rw-r--r-- | action.c | 12 | ||||
-rw-r--r-- | runtime/wti.h | 14 |
2 files changed, 24 insertions, 2 deletions
@@ -562,7 +562,8 @@ static inline void actionSetState(action_t *pThis, wti_t *pWti, uint8_t newState) { setActionState(pWti, pThis, newState); - DBGPRINTF("Action %p transitioned to state: %s\n", pThis, getActStateName(pThis, pWti)); + DBGPRINTF("Action %d transitioned to state: %s\n", + pThis->iActionNbr, getActStateName(pThis, pWti)); } /* Handles the transient commit state. So far, this is @@ -758,6 +759,7 @@ static inline rsRetVal actionPrepare(action_t *pThis, int *pbShutdownImmediate, * action state accordingly */ if(getActionState(pWti, pThis) == ACT_STATE_RDY) { +dbgprintf("DDDDD: calling beginTransaction for action %d\n", pThis->iActionNbr); iRet = pThis->pMod->mod.om.beginTransaction(pWti->actWrkrInfo[pThis->iActionNbr].actWrkrData); switch(iRet) { case RS_RET_OK: @@ -935,6 +937,7 @@ actionCallDoAction(action_t *pThis, msg_t *pMsg, void *actParams, wti_t *pWti) CHKiRet(actionCheckAndCreateWrkrInstance(pThis, pWti)); pThis->bHadAutoCommit = 0; +dbgprintf("DDDDD: calling doAction for action %d\n", pThis->iActionNbr); iRet = pThis->pMod->mod.om.doAction(actParams, pMsg->msgFlags, pWti->actWrkrInfo[pThis->iActionNbr].actWrkrData); switch(iRet) { @@ -1004,6 +1007,11 @@ finishBatch(action_t *pThis, batch_t *pBatch, wti_t *pWti) DEFiRet; ASSERT(pThis != NULL); +// Testing for new engine: +dbgprintf("DDDD: iActionNbr %d\n", iActionNbr); +for(i = 0 ; i < iActionNbr ; ++i) { + dbgprintf("DDDD: finishBatch, act %d state %u\n", i, getActionStateByNbr(pWti, i)); +} if(getActionState(pWti, pThis) == ACT_STATE_RDY) { /* we just need to flag the batch as commited */ @@ -1012,6 +1020,7 @@ finishBatch(action_t *pThis, batch_t *pBatch, wti_t *pWti) CHKiRet(actionPrepare(pThis, pBatch->pbShutdownImmediate, pWti)); if(getActionState(pWti, pThis) == ACT_STATE_ITX) { +dbgprintf("DDDDD: calling endTransaction for action %d\n", pThis->iActionNbr); iRet = pThis->pMod->mod.om.endTransaction(pWti->actWrkrInfo[pThis->iActionNbr].actWrkrData); switch(iRet) { case RS_RET_OK: @@ -1385,6 +1394,7 @@ doSubmitToActionQ(action_t *pAction, msg_t *pMsg, wti_t *pWti) { DEFiRet; + // TODO: bug? Isn't that supposed to be checked in direct mode as well??? if(getActionState(pWti, pAction) == ACT_STATE_DIED) { DBGPRINTF("action %p died, do NOT execute\n", pAction); FINALIZE; diff --git a/runtime/wti.h b/runtime/wti.h index 35e854a9..3758c62d 100644 --- a/runtime/wti.h +++ b/runtime/wti.h @@ -29,12 +29,18 @@ #include "action.h" -#define ACT_STATE_DIED 0 /* action permanently failed and now disabled - MUST BE ZERO! */ +/* TODO: check if we really need the unused value -- I think we can just use the ITX state + * when we check at "end of batch" (in wti processing). In that case, we can set RDY = 0 + * and remove unused. -- rgerhards 2013-11-01 + */ +#define ACT_STATE_UNUSED 0 /* action has not yet been used - MUST BE ZERO! */ #define ACT_STATE_RDY 1 /* action ready, waiting for new transaction */ #define ACT_STATE_ITX 2 /* transaction active, waiting for new data or commit */ #define ACT_STATE_COMM 3 /* transaction finished (a transient state) */ #define ACT_STATE_RTRY 4 /* failure occured, trying to restablish ready state */ #define ACT_STATE_SUSP 5 /* suspended due to failure (return fail until timeout expired) */ +#define ACT_STATE_DIED 6 /* action permanently failed and now disabled */ +/* note: 3 bit bit field --> highest value is 7! */ typedef struct actWrkrInfo { action_t *pAction; @@ -75,6 +81,12 @@ PROTOTYPEpropSetMeth(wti, pszDbgHdr, uchar*); PROTOTYPEpropSetMeth(wti, pWtp, wtp_t*); static inline uint8_t +getActionStateByNbr(wti_t *pWti, int iActNbr) +{ + return((uint8_t) pWti->actWrkrInfo[iActNbr].flags.actState); +} + +static inline uint8_t getActionState(wti_t *pWti, action_t *pAction) { return((uint8_t) pWti->actWrkrInfo[pAction->iActionNbr].flags.actState); |