diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2013-11-05 10:00:47 +0100 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2013-11-05 10:00:47 +0100 |
commit | a57c8cea990afc9f36839408eea6bea8ddf8a4fe (patch) | |
tree | 799c44911c67cde0bc4ef8cbc23e62a266805d7c /runtime/ruleset.c | |
parent | 73e7088748e560cd0c6d1ed7264951d32f64d060 (diff) | |
parent | 696c084e51ce49dc4a3f70642df469712eed8de6 (diff) | |
download | rsyslog-a57c8cea990afc9f36839408eea6bea8ddf8a4fe.tar.gz rsyslog-a57c8cea990afc9f36839408eea6bea8ddf8a4fe.tar.bz2 rsyslog-a57c8cea990afc9f36839408eea6bea8ddf8a4fe.zip |
Merge branch 'v7-stable-call-ruleset-queue' into v7-stable
Conflicts:
ChangeLog
Diffstat (limited to 'runtime/ruleset.c')
-rw-r--r-- | runtime/ruleset.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/runtime/ruleset.c b/runtime/ruleset.c index 5bf7ac03..1afb4039 100644 --- a/runtime/ruleset.c +++ b/runtime/ruleset.c @@ -284,6 +284,30 @@ execStop(batch_t *pBatch, sbool *active) } RETiRet; } +static rsRetVal +execCall(struct cnfstmt *stmt, batch_t *pBatch, sbool *active) +{ + msg_t *pMsg; + int i; + DEFiRet; + if(stmt->d.s_call.ruleset == NULL) { + scriptExec(stmt->d.s_call.stmt, pBatch, active); + } else { + for(i = 0 ; i < batchNumMsgs(pBatch) ; ++i) { + CHKmalloc(pMsg = MsgDup((msg_t*) pBatch->pElem[i].pMsg)); + DBGPRINTF("CALL: forwarding message %d to async ruleset %p\n", + i, stmt->d.s_call.ruleset->pQueue); + MsgSetFlowControlType(pMsg, eFLOWCTL_NO_DELAY); + MsgSetRuleset(pMsg, stmt->d.s_call.ruleset); + /* Note: we intentionally use submitMsg2() here, as we process messages + * that were already run through the rate-limiter. + */ + submitMsg2(pMsg); + } + } +finalize_it: + RETiRet; +} /* for details, see scriptExec() header comment! */ // save current filter, evaluate new one @@ -535,7 +559,7 @@ scriptExec(struct cnfstmt *root, batch_t *pBatch, sbool *active) execUnset(stmt, pBatch, active); break; case S_CALL: - scriptExec(stmt->d.s_call.stmt, pBatch, active); + execCall(stmt, pBatch, active); break; case S_IF: execIf(stmt, pBatch, active); |