From: Daniel Wagner <daniel.wag...@bmw-carit.de>

pre_load_table() is called always with table == NULL, we end up
keep trying to load the kernel modules even though the table
is already loaded. Therefore, move the lookup one level up.
---
 src/iptables.c | 24 ++++++++++++++----------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/src/iptables.c b/src/iptables.c
index 8c23a77..1db87ac 100644
--- a/src/iptables.c
+++ b/src/iptables.c
@@ -1388,9 +1388,6 @@ static struct connman_iptables *iptables_init(const char 
*table_name)
        char *module = NULL;
        socklen_t s;
 
-       if (table_name == NULL)
-               table_name = "filter";
-
        DBG("%s", table_name);
 
        if (xtables_insmod("ip_tables", NULL, TRUE) != 0)
@@ -1405,10 +1402,6 @@ static struct connman_iptables *iptables_init(const char 
*table_name)
 
        g_free(module);
 
-       table = g_hash_table_lookup(table_hash, table_name);
-       if (table != NULL)
-               return table;
-
        table = g_try_new0(struct connman_iptables, 1);
        if (table == NULL)
                return NULL;
@@ -1455,8 +1448,6 @@ static struct connman_iptables *iptables_init(const char 
*table_name)
                        table->info->underflow, table->blob_entries->size,
                        add_entry, table);
 
-       g_hash_table_insert(table_hash, g_strdup(table_name), table);
-
        if (debug_enabled == TRUE)
                dump_table(table);
 
@@ -1669,7 +1660,20 @@ static struct connman_iptables *pre_load_table(const 
char *table_name,
        if (table != NULL)
                return table;
 
-       return iptables_init(table_name);
+       if (table_name == NULL)
+               table_name = "filter";
+
+       table = g_hash_table_lookup(table_hash, table_name);
+       if (table != NULL)
+               return table;
+
+       table = iptables_init(table_name);
+       if (table == NULL)
+               return NULL;
+
+       g_hash_table_insert(table_hash, g_strdup(table_name), table);
+
+       return table;
 }
 
 struct parse_context {
-- 
1.8.1.3.566.gaa39828

_______________________________________________
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman

Reply via email to