summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2008-06-30 07:04:28 +0200
committerMarcel Holtmann <marcel@holtmann.org>2008-06-30 07:04:28 +0200
commita33aac1132ed5061f7ce694a318d1b46a7e3a932 (patch)
tree950f412768c6b06ac32094708b30ab1a1fa6f431 /src
parent6ba29c1f7d994d3594d2094509a0e3a72ffd1f0b (diff)
downloadconnman-a33aac1132ed5061f7ce694a318d1b46a7e3a932.tar.gz
connman-a33aac1132ed5061f7ce694a318d1b46a7e3a932.tar.bz2
connman-a33aac1132ed5061f7ce694a318d1b46a7e3a932.zip
Use read/write lock for driver list instead of a mutex
Diffstat (limited to 'src')
-rw-r--r--src/element.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/element.c b/src/element.c
index 93ae5d19..fa06da07 100644
--- a/src/element.c
+++ b/src/element.c
@@ -32,7 +32,7 @@
static DBusConnection *connection;
-static GStaticMutex driver_mutex = G_STATIC_MUTEX_INIT;
+static GStaticRWLock driver_lock = G_STATIC_RW_LOCK_INIT;
static GSList *driver_list = NULL;
static GThreadPool *driver_thread;
@@ -247,10 +247,10 @@ int connman_driver_register(struct connman_driver *driver)
if (!driver->probe)
return -EINVAL;
- g_static_mutex_lock(&driver_mutex);
+ g_static_rw_lock_writer_lock(&driver_lock);
driver_list = g_slist_insert_sorted(driver_list, driver,
compare_priority);
- g_static_mutex_unlock(&driver_mutex);
+ g_static_rw_lock_writer_unlock(&driver_lock);
g_thread_pool_push(driver_thread, driver, NULL);
@@ -282,9 +282,9 @@ void connman_driver_unregister(struct connman_driver *driver)
remove_driver, driver);
g_static_mutex_unlock(&element_mutex);
- g_static_mutex_lock(&driver_mutex);
+ g_static_rw_lock_writer_lock(&driver_lock);
driver_list = g_slist_remove(driver_list, driver);
- g_static_mutex_unlock(&driver_mutex);
+ g_static_rw_lock_writer_unlock(&driver_lock);
}
struct connman_element *connman_element_create(void)
@@ -633,7 +633,7 @@ static void element_probe(gpointer data, gpointer user_data)
if (connman_element_ref(element) == NULL)
return;
- g_static_mutex_lock(&driver_mutex);
+ g_static_rw_lock_reader_lock(&driver_lock);
for (list = driver_list; list; list = list->next) {
struct connman_driver *driver = list->data;
@@ -649,7 +649,7 @@ static void element_probe(gpointer data, gpointer user_data)
set_driver(element, NULL);
}
- g_static_mutex_unlock(&driver_mutex);
+ g_static_rw_lock_reader_unlock(&driver_lock);
connman_element_unref(element);
}