From 509bf34f1843203cdaa21bfbdb88212ab8de8c8f Mon Sep 17 00:00:00 2001 From: Eric Leblond Date: Thu, 12 Jun 2008 11:06:28 +0200 Subject: Fix the propagation through the stack When a plugin returns ULOGD_IRET_STOP, the propagation should stop. This was not the case as break was used to do so but it was called inside a switch and thus apply to the switch instruction and not to the llist iteration. Signed-off-by: Eric Leblond --- src/ulogd.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/ulogd.c b/src/ulogd.c index 8c8dc14..4e36984 100644 --- a/src/ulogd.c +++ b/src/ulogd.c @@ -477,6 +477,7 @@ static void ulogd_clean_results(struct ulogd_pluginstance *pi) void ulogd_propagate_results(struct ulogd_pluginstance *pi) { struct ulogd_pluginstance *cur = pi; + int abort_stack = 0; /* iterate over remaining plugin stack */ llist_for_each_entry_continue(cur, &pi->stack->list, list) { int ret; @@ -489,6 +490,7 @@ void ulogd_propagate_results(struct ulogd_pluginstance *pi) /* fallthrough */ case ULOGD_IRET_STOP: /* we shall abort further iteration of the stack */ + abort_stack = 1; break; case ULOGD_IRET_OK: /* we shall continue travelling down the stack */ @@ -497,8 +499,12 @@ void ulogd_propagate_results(struct ulogd_pluginstance *pi) ulogd_log(ULOGD_NOTICE, "unknown return value `%d' from plugin %s\n", ret, cur->plugin->name); + abort_stack = 1; break; } + + if (abort_stack) + break; } ulogd_clean_results(pi); -- cgit v1.2.3