]> git.ipfire.org Git - thirdparty/ulogd2.git/commitdiff
When a plugin instance is used in multiple stack it is not necessary to
author/C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org </C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org>
Tue, 25 Mar 2008 08:56:08 +0000 (08:56 +0000)
committer/C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org </C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org>
Tue, 25 Mar 2008 08:56:08 +0000 (08:56 +0000)
call the start function for each stack.

Signed-off-by: Eric Leblond <eric@inl.fr>
src/ulogd.c

index da821ee28a9a21505c83690a2f3b76d613050e62..7a779e64ffaf34f88518d9fd8205bdcc07f8426c 100644 (file)
@@ -710,6 +710,24 @@ create_stack_resolve_keys(struct ulogd_pluginstance_stack *stack)
        return 0;
 }
 
+/* iterate on already defined stack to find a plugininstance matching */
+static int pluginstance_started(struct ulogd_pluginstance *npi)
+{
+       struct ulogd_pluginstance_stack *stack;
+       struct ulogd_pluginstance *pi;
+
+       llist_for_each_entry(stack, &ulogd_pi_stacks, stack_list) {
+               llist_for_each_entry(pi, &stack->list, list) {
+                       if (!strcmp(pi->id, npi->id)) {
+                               ulogd_log(ULOGD_INFO, "%s instance already "
+                                                     "loaded\n", pi->id);
+                               return 1;
+                       }
+               }
+       }
+       return 0;
+}
+
 static int create_stack_start_instances(struct ulogd_pluginstance_stack *stack)
 {
        int ret;
@@ -720,11 +738,15 @@ static int create_stack_start_instances(struct ulogd_pluginstance_stack *stack)
                if (!pi->plugin->start)
                        continue;
 
-               ret = pi->plugin->start(pi);
-               if (ret < 0) {
-                       ulogd_log(ULOGD_ERROR, "error during start of `%s'\n",
-                                 pi->id);
-                       return ret;
+               /* only call start if a plugin with same ID was not started */
+               if (!pluginstance_started(pi)) {
+                       ret = pi->plugin->start(pi);
+                       if (ret < 0) {
+                               ulogd_log(ULOGD_ERROR, 
+                                         "error starting `%s'\n",
+                                         pi->id);
+                               return ret;
+                       }
                }
        }
        return 0;