All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Leblond <eric@inl.fr>
To: netfilter-devel@vger.kernel.org
Cc: Eric Leblond <eric@inl.fr>
Subject: [ULOGD PATCH 4/8] Don't call start function multiple time for a single plugin instance.
Date: Sun,  9 Mar 2008 23:36:25 +0100	[thread overview]
Message-ID: <12051021893106-git-send-email-eric@inl.fr> (raw)
In-Reply-To: <12051021893015-git-send-email-eric@inl.fr>

When a plugin instance is used in multiple stack it is not necessary to
call the start function for each stack.

Signed-off-by: Eric Leblond <eric@inl.fr>
---
 src/ulogd.c |   33 ++++++++++++++++++++++++++++-----
 1 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/src/ulogd.c b/src/ulogd.c
index da821ee..b69d25d 100644
--- a/src/ulogd.c
+++ b/src/ulogd.c
@@ -710,6 +710,25 @@ create_stack_resolve_keys(struct ulogd_pluginstance_stack *stack)
 	return 0;
 }
 
+/* iterate on already defined stack to find if a plugininstance
+ * has already been instance (matching is on id) */
+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) {
+			/* OK, pluginstance already exists in stack 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 +739,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;
+		/* we only call start if a plugin with same ID has not yet be
+		 * started */
+		if (! pluginstance_started(pi)) {
+			ret = pi->plugin->start(pi);
+			if (ret < 0) {
+				ulogd_log(ULOGD_ERROR, "error during start of `%s'\n",
+						pi->id);
+				return ret;
+			}
 		}
 	}
 	return 0;
-- 
1.5.4.3


  parent reply	other threads:[~2008-03-09 22:36 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-09 22:36 [ULOGD PATCH 0/8] Allow reuse of plugin instance (and misc fixes) Eric Leblond
2008-03-09 22:36 ` [ULOGD PATCH 1/8] Add hook to list of fields in database for packet logging Eric Leblond
2008-03-25  8:41   ` Pablo Neira Ayuso
2008-03-09 22:36 ` [ULOGD PATCH 2/8] Introduce RAWSTR type to avoid confusion in future developement Eric Leblond
2008-03-25  8:42   ` Pablo Neira Ayuso
2008-03-09 22:36 ` [ULOGD PATCH 3/8] Fix indentation in ulogd_inppkt_NFLOG.c Eric Leblond
2008-03-25  8:43   ` Pablo Neira Ayuso
2008-03-09 22:36 ` Eric Leblond [this message]
2008-03-25  8:48   ` [ULOGD PATCH 4/8] Don't call start function multiple time for a single plugin instance Pablo Neira Ayuso
2008-03-09 22:36 ` [ULOGD PATCH 5/8] Add a list of used plugininstance Eric Leblond
2008-03-25  9:50   ` Pablo Neira Ayuso
2008-03-09 22:36 ` [ULOGD PATCH 6/8] Duplicate message to all existing instance of NFLOG Eric Leblond
2008-03-25  9:54   ` Pablo Neira Ayuso
2008-03-09 22:36 ` [ULOGD PATCH 7/8] Add code for duplication of message in ULOG Eric Leblond
2008-03-25  9:59   ` Pablo Neira Ayuso
2008-03-09 22:36 ` [ULOGD PATCH 8/8] Duplication of message in NFCT input plugin Eric Leblond
2008-03-25 10:02   ` Pablo Neira Ayuso
2008-03-25 10:03 ` [ULOGD PATCH 0/8] Allow reuse of plugin instance (and misc fixes) Pablo Neira Ayuso
2008-03-25 15:36   ` Eric Leblond

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=12051021893106-git-send-email-eric@inl.fr \
    --to=eric@inl.fr \
    --cc=netfilter-devel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.