This email list is read-only.  Emails sent to this list will be discarded
----------------------------------
 plugins/wifi.c |    5 +++++
 src/element.c  |   53 ++++-------------------------------------------------
 src/resolver.c |    9 ---------
 src/rtnl.c     |   17 -----------------
 src/security.c |   13 -------------
 5 files changed, 9 insertions(+), 88 deletions(-)

New commits:
commit 2ab74c251611b6e77a575677d466997d3031a37e
Author: Marcel Holtmann <[email protected]>
Date:   Fri Dec 12 01:18:04 2008 +0100

    Fix issue with wpa_supplicant disconnecting

commit 56483301b45ba75e91e3f67775cef8a2a74d56b2
Author: Marcel Holtmann <[email protected]>
Date:   Fri Dec 12 01:17:33 2008 +0100

    Call disable callback before remove callback

commit cd320803ef8b6850e097adcd4c074ef416be190a
Author: Marcel Holtmann <[email protected]>
Date:   Fri Dec 12 00:45:36 2008 +0100

    Remove usage of reader/write lock


Diff in this email is a maximum of 400 lines.
diff --git a/plugins/wifi.c b/plugins/wifi.c
index 93312ca..660ea9f 100644
--- a/plugins/wifi.c
+++ b/plugins/wifi.c
@@ -148,6 +148,9 @@ static void state_change(struct connman_element *parent,
 
        DBG("state %d", state);
 
+       if (data == NULL)
+               return;
+
        if (data->identifier == NULL)
                return;
 
@@ -334,6 +337,8 @@ static int wifi_disable(struct connman_element *element)
 
        connman_element_unregister_children(element);
 
+       __supplicant_stop(element);
+
        return 0;
 }
 
diff --git a/src/element.c b/src/element.c
index 16a7d27..2d8168d 100644
--- a/src/element.c
+++ b/src/element.c
@@ -34,11 +34,8 @@
 
 static DBusConnection *connection;
 
-static GStaticRWLock element_lock = G_STATIC_RW_LOCK_INIT;
 static GNode *element_root = NULL;
-
 static GSList *driver_list = NULL;
-
 static gchar *device_filter = NULL;
 
 static struct {
@@ -884,10 +881,8 @@ void __connman_element_list(struct connman_element 
*element,
        } else
                node = element_root;
 
-       g_static_rw_lock_reader_lock(&element_lock);
        g_node_traverse(node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
                                                append_path, &filter);
-       g_static_rw_lock_reader_unlock(&element_lock);
 }
 
 struct count_data {
@@ -930,10 +925,8 @@ int __connman_element_count(struct connman_element 
*element,
        } else
                node = element_root;
 
-       g_static_rw_lock_reader_lock(&element_lock);
        g_node_traverse(node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
                                                count_element, &data);
-       g_static_rw_lock_reader_unlock(&element_lock);
 
        return data.count;
 }
@@ -1005,13 +998,9 @@ void __connman_driver_rescan(struct connman_driver 
*driver)
        if (!driver->probe)
                return;
 
-       g_static_rw_lock_writer_lock(&element_lock);
-
        if (element_root != NULL)
                g_node_traverse(element_root, G_PRE_ORDER,
                                G_TRAVERSE_ALL, -1, probe_driver, driver);
-
-       g_static_rw_lock_writer_unlock(&element_lock);
 }
 
 /**
@@ -1032,8 +1021,6 @@ int connman_driver_register(struct connman_driver *driver)
        if (!driver->probe)
                return -EINVAL;
 
-       g_static_rw_lock_writer_lock(&element_lock);
-
        driver_list = g_slist_insert_sorted(driver_list, driver,
                                                        compare_priority);
 
@@ -1041,8 +1028,6 @@ int connman_driver_register(struct connman_driver *driver)
                g_node_traverse(element_root, G_PRE_ORDER,
                                G_TRAVERSE_ALL, -1, probe_driver, driver);
 
-       g_static_rw_lock_writer_unlock(&element_lock);
-
        return 0;
 }
 
@@ -1091,15 +1076,11 @@ void connman_driver_unregister(struct connman_driver 
*driver)
 {
        DBG("driver %p name %s", driver, driver->name);
 
-       g_static_rw_lock_writer_lock(&element_lock);
-
        driver_list = g_slist_remove(driver_list, driver);
 
        if (element_root != NULL)
                g_node_traverse(element_root, G_POST_ORDER,
                                G_TRAVERSE_ALL, -1, remove_driver, driver);
-
-       g_static_rw_lock_writer_unlock(&element_lock);
 }
 
 /**
@@ -1754,8 +1735,6 @@ static void register_element(gpointer data, gpointer 
user_data)
        GSList *list;
        GNode *node;
 
-       g_static_rw_lock_writer_lock(&element_lock);
-
        __connman_element_lock(element);
 
        if (element->parent) {
@@ -1833,12 +1812,8 @@ static void register_element(gpointer data, gpointer 
user_data)
                                                        DBUS_TYPE_INVALID);
 #endif
 
-       g_static_rw_lock_writer_unlock(&element_lock);
-
        __connman_element_store(element);
 
-       g_static_rw_lock_writer_lock(&element_lock);
-
        for (list = driver_list; list; list = list->next) {
                struct connman_driver *driver = list->data;
 
@@ -1856,8 +1831,6 @@ static void register_element(gpointer data, gpointer 
user_data)
                        break;
                }
        }
-
-       g_static_rw_lock_writer_unlock(&element_lock);
 }
 
 /**
@@ -1920,6 +1893,8 @@ static gboolean remove_element(GNode *node, gpointer 
user_data)
                return FALSE;
 
        if (element->driver) {
+               disable_element(element);
+
                if (element->driver->remove)
                        element->driver->remove(element);
 
@@ -1976,15 +1951,11 @@ void connman_element_unregister(struct connman_element 
*element)
 
        DBG("element %p name %s", element, element->name);
 
-       g_static_rw_lock_writer_lock(&element_lock);
-
        node = g_node_find(element_root, G_PRE_ORDER, G_TRAVERSE_ALL, element);
 
        if (node != NULL)
                g_node_traverse(node, G_POST_ORDER,
                                G_TRAVERSE_ALL, -1, remove_element, NULL);
-
-       g_static_rw_lock_writer_unlock(&element_lock);
 }
 
 void connman_element_unregister_children(struct connman_element *element)
@@ -1993,15 +1964,11 @@ void connman_element_unregister_children(struct 
connman_element *element)
 
        DBG("element %p name %s", element, element->name);
 
-       g_static_rw_lock_writer_lock(&element_lock);
-
        node = g_node_find(element_root, G_PRE_ORDER, G_TRAVERSE_ALL, element);
 
        if (node != NULL)
                g_node_traverse(node, G_POST_ORDER,
                                G_TRAVERSE_ALL, -1, remove_element, element);
-
-       g_static_rw_lock_writer_unlock(&element_lock);
 }
 
 static gboolean update_element(GNode *node, gpointer user_data)
@@ -2029,15 +1996,11 @@ void connman_element_update(struct connman_element 
*element)
 
        DBG("element %p name %s", element, element->name);
 
-       g_static_rw_lock_reader_lock(&element_lock);
-
        node = g_node_find(element_root, G_PRE_ORDER, G_TRAVERSE_ALL, element);
 
        if (node != NULL)
                g_node_traverse(node, G_PRE_ORDER,
                                G_TRAVERSE_ALL, -1, update_element, NULL);
-
-       g_static_rw_lock_reader_unlock(&element_lock);
 }
 
 int connman_element_set_enabled(struct connman_element *element,
@@ -2065,8 +2028,6 @@ int __connman_element_init(DBusConnection *conn, const 
char *device)
 
        device_filter = g_strdup(device);
 
-       g_static_rw_lock_writer_lock(&element_lock);
-
        element = connman_element_create("root");
 
        element->path = g_strdup("/");
@@ -2076,8 +2037,6 @@ int __connman_element_init(DBusConnection *conn, const 
char *device)
 
        element_root = g_node_new(element);
 
-       g_static_rw_lock_writer_unlock(&element_lock);
-
        __connman_device_init();
 
        return 0;
@@ -2090,6 +2049,8 @@ static gboolean free_driver(GNode *node, gpointer data)
        DBG("element %p name %s", element, element->name);
 
        if (element->driver) {
+               disable_element(element);
+
                if (element->driver->remove)
                        element->driver->remove(element);
 
@@ -2119,20 +2080,14 @@ void __connman_element_cleanup(void)
 
        __connman_device_cleanup();
 
-       g_static_rw_lock_writer_lock(&element_lock);
        g_node_traverse(element_root, G_POST_ORDER, G_TRAVERSE_ALL, -1,
                                                        free_driver, NULL);
-       g_static_rw_lock_writer_unlock(&element_lock);
 
-       g_static_rw_lock_writer_lock(&element_lock);
        g_node_traverse(element_root, G_POST_ORDER, G_TRAVERSE_ALL, -1,
                                                        free_node, NULL);
-       g_static_rw_lock_writer_unlock(&element_lock);
 
-       g_static_rw_lock_writer_lock(&element_lock);
        g_node_destroy(element_root);
        element_root = NULL;
-       g_static_rw_lock_writer_unlock(&element_lock);
 
        g_free(device_filter);
 
diff --git a/src/resolver.c b/src/resolver.c
index 404bc3d..929fd2e 100644
--- a/src/resolver.c
+++ b/src/resolver.c
@@ -25,7 +25,6 @@
 
 #include "connman.h"
 
-static GStaticRWLock resolver_lock = G_STATIC_RW_LOCK_INIT;
 static GSList *resolver_list = NULL;
 
 /**
@@ -40,12 +39,8 @@ int connman_resolver_register(struct connman_resolver 
*resolver)
 {
        DBG("resolver %p name %s", resolver, resolver->name);
 
-       g_static_rw_lock_writer_lock(&resolver_lock);
-
        resolver_list = g_slist_append(resolver_list, resolver);
 
-       g_static_rw_lock_writer_unlock(&resolver_lock);
-
        return 0;
 }
 
@@ -59,9 +54,5 @@ void connman_resolver_unregister(struct connman_resolver 
*resolver)
 {
        DBG("resolver %p name %s", resolver, resolver->name);
 
-       g_static_rw_lock_writer_lock(&resolver_lock);
-
        resolver_list = g_slist_remove(resolver_list, resolver);
-
-       g_static_rw_lock_writer_unlock(&resolver_lock);
 }
diff --git a/src/rtnl.c b/src/rtnl.c
index 1e66a9a..ece4f16 100644
--- a/src/rtnl.c
+++ b/src/rtnl.c
@@ -36,7 +36,6 @@
 
 #include "connman.h"
 
-static GStaticRWLock rtnl_lock = G_STATIC_RW_LOCK_INIT;
 static GSList *rtnl_list = NULL;
 
 static gint compare_priority(gconstpointer a, gconstpointer b)
@@ -59,13 +58,9 @@ int connman_rtnl_register(struct connman_rtnl *rtnl)
 {
        DBG("rtnl %p name %s", rtnl, rtnl->name);
 
-       g_static_rw_lock_writer_lock(&rtnl_lock);
-
        rtnl_list = g_slist_insert_sorted(rtnl_list, rtnl,
                                                        compare_priority);
 
-       g_static_rw_lock_writer_unlock(&rtnl_lock);
-
        return 0;
 }
 
@@ -79,11 +74,7 @@ void connman_rtnl_unregister(struct connman_rtnl *rtnl)
 {
        DBG("rtnl %p name %s", rtnl, rtnl->name);
 
-       g_static_rw_lock_writer_lock(&rtnl_lock);
-
        rtnl_list = g_slist_remove(rtnl_list, rtnl);
-
-       g_static_rw_lock_writer_unlock(&rtnl_lock);
 }
 
 static void process_newlink(unsigned short type, int index,
@@ -93,16 +84,12 @@ static void process_newlink(unsigned short type, int index,
 
        DBG("index %d", index);
 
-       g_static_rw_lock_reader_lock(&rtnl_lock);
-
        for (list = rtnl_list; list; list = list->next) {
                struct connman_rtnl *rtnl = list->data;
 
                if (rtnl->newlink)
                        rtnl->newlink(type, index, flags, change);
        }
-
-       g_static_rw_lock_reader_unlock(&rtnl_lock);
 }
 
 static void process_dellink(unsigned short type, int index,
@@ -112,16 +99,12 @@ static void process_dellink(unsigned short type, int index,
 
        DBG("index %d", index);
 
-       g_static_rw_lock_reader_lock(&rtnl_lock);
-
        for (list = rtnl_list; list; list = list->next) {
                struct connman_rtnl *rtnl = list->data;
 
                if (rtnl->dellink)
                        rtnl->dellink(type, index, flags, change);
        }
-
-       g_static_rw_lock_reader_unlock(&rtnl_lock);
 }
 
 static inline void print_inet(struct rtattr *attr, const char *name, int 
family)
diff --git a/src/security.c b/src/security.c
index c7c3ccf..41d45e4 100644
--- a/src/security.c
+++ b/src/security.c
@@ -25,7 +25,6 @@
 
 #include "connman.h"
 
-static GStaticRWLock security_lock = G_STATIC_RW_LOCK_INIT;
 static GSList *security_list = NULL;
 
 static gint compare_priority(gconstpointer a, gconstpointer b)
@@ -48,13 +47,9 @@ int connman_security_register(struct connman_security 
*security)
 {
        DBG("security %p name %s", security, security->name);
 
-       g_static_rw_lock_writer_lock(&security_lock);
-
        security_list = g_slist_insert_sorted(security_list, security,
                                                        compare_priority);
 
-       g_static_rw_lock_writer_unlock(&security_lock);
-
        return 0;
 }
 
@@ -68,11 +63,7 @@ void connman_security_unregister(struct connman_security 
*security)
 {
        DBG("security %p name %s", security, security->name);
 
-       g_static_rw_lock_writer_lock(&security_lock);
-
        security_list = g_slist_remove(security_list, security);
-
-       g_static_rw_lock_writer_unlock(&security_lock);
 }
 
 int __connman_security_check_privileges(DBusMessage *message)
@@ -85,8 +76,6 @@ int __connman_security_check_privileges(DBusMessage *message)
 
        sender = dbus_message_get_sender(message);
 
-       g_static_rw_lock_reader_lock(&security_lock);
-
        for (list = security_list; list; list = list->next) {
                struct connman_security *security = list->data;
 
@@ -98,7 +87,5 @@ int __connman_security_check_privileges(DBusMessage *message)
_______________________________________________
Commits mailing list
[email protected]
https://lists.moblin.org/mailman/listinfo/commits

Reply via email to