From 3969b90cdeabe09028266c8b3a28c9ffcec82cec Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Fri, 19 Apr 2013 19:20:51 +0200 Subject: libusbmuxd: use separate mutex for initialization --- libusbmuxd/libusbmuxd.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/libusbmuxd/libusbmuxd.c b/libusbmuxd/libusbmuxd.c index 904f1ed..6721fe6 100644 --- a/libusbmuxd/libusbmuxd.c +++ b/libusbmuxd/libusbmuxd.c @@ -79,6 +79,7 @@ static void* event_user_data = NULL; static thread_t devmon = NULL; static mutex_t mutex; +static mutex_t init_mutex; static int listenfd = -1; @@ -87,12 +88,14 @@ static int proto_version = 0; static __attribute__((constructor)) void libusbmuxd_library_init() { + mutex_init(&init_mutex); mutex_init(&mutex); } static __attribute__((destructor)) void libusbmuxd_library_deinit() { mutex_destroy(&mutex); + mutex_destroy(&init_mutex); } /** @@ -653,25 +656,25 @@ static void *device_monitor(void *data) int usbmuxd_init() { int res = 0; - mutex_lock(&mutex); + mutex_lock(&init_mutex); handle_events = 1; res = thread_create(&devmon, device_monitor, NULL); if (res != 0) { DEBUG(1, "%s: ERROR: Could not start device watcher thread!\n", __func__); handle_events = 0; - mutex_unlock(&mutex); + mutex_unlock(&init_mutex); return res; } struct timespec ts = {0, 250000000}; nanosleep(&ts, NULL); libusbmuxd_initialized = 1; - mutex_unlock(&mutex); + mutex_unlock(&init_mutex); return 0; } int usbmuxd_deinit() { - mutex_lock(&mutex); + mutex_lock(&init_mutex); handle_events = 0; shutdown_socket(listenfd, SHUT_RDWR); @@ -681,7 +684,7 @@ int usbmuxd_deinit() thread_join(devmon); } libusbmuxd_initialized = 0; - mutex_unlock(&mutex); + mutex_unlock(&init_mutex); return 0; } @@ -694,9 +697,9 @@ int usbmuxd_subscribe(usbmuxd_event_cb_t callback, void *user_data) event_user_data = user_data; int is_initialized = 0; - mutex_lock(&mutex); + mutex_lock(&init_mutex); is_initialized = libusbmuxd_initialized; - mutex_unlock(&mutex); + mutex_unlock(&init_mutex); if (!is_initialized) { usbmuxd_init(); @@ -861,9 +864,9 @@ int usbmuxd_get_device_by_udid(const char *udid, usbmuxd_device_info_t *device) } int is_initialized = 0; - mutex_lock(&mutex); + mutex_lock(&init_mutex); is_initialized = libusbmuxd_initialized; - mutex_unlock(&mutex); + mutex_unlock(&init_mutex); if (!is_initialized) { usbmuxd_init(); -- cgit v1.1-32-gdbae