summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2013-04-19 19:20:51 +0200
committerGravatar Nikias Bassen2013-04-19 19:20:51 +0200
commit3969b90cdeabe09028266c8b3a28c9ffcec82cec (patch)
tree89a571ca1d45ac3a81e70ef1b8bc57907facc541
parent8bfe1c0e7f59325092edf16c1e66f86a1a02feff (diff)
downloadusbmuxd-3969b90cdeabe09028266c8b3a28c9ffcec82cec.tar.gz
usbmuxd-3969b90cdeabe09028266c8b3a28c9ffcec82cec.tar.bz2
libusbmuxd: use separate mutex for initialization
-rw-r--r--libusbmuxd/libusbmuxd.c21
1 files 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();