From 4402ead1fcc01a75e1632be04e910359f23e9881 Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Wed, 8 Apr 2009 13:15:06 +0200 Subject: Start bulk reader thread _after_ successfully creating a connection to to prevent pthread locking with uninitialized locking variable. Still only started once per device. --- main.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/main.c b/main.c index 8560aac..a75a440 100644 --- a/main.c +++ b/main.c @@ -633,11 +633,11 @@ connect: cur_dev->use_count = 1; cur_dev->device_id = c_req->device_id; cur_dev->phone = phone; + cur_dev->bulk_reader = 0; pthread_mutex_init(&cur_dev->mutex, NULL); pthread_mutex_init(&cur_dev->writer_mutex, NULL); if (verbose >= 3) fprintf(stderr, "%s: device_use_count = %d\n", __func__, device_use_count); - pthread_create(&cur_dev->bulk_reader, NULL, usbmuxd_bulk_reader_thread, cur_dev); pthread_mutex_lock(&usbmux_mutex); device_use_list = (struct device_use_info**)realloc(device_use_list, sizeof(struct device_use_info*) * (device_use_count+1)); @@ -661,6 +661,11 @@ connect: goto leave; } + // start bulk reader thread (once per device) + if (cur_dev->bulk_reader == 0) { + pthread_create(&cur_dev->bulk_reader, NULL, usbmuxd_bulk_reader_thread, cur_dev); + } + // start connection handler thread cdata->handler_dead = 0; cdata->tag = c_req->header.tag; @@ -728,7 +733,9 @@ leave: if (verbose >= 3) fprintf(stderr, "%s: last client disconnected, cleaning up\n", __func__); cur_dev->use_count = 0; pthread_mutex_unlock(&cur_dev->mutex); - pthread_join(cur_dev->bulk_reader, NULL); + if (cur_dev->bulk_reader != 0) { + pthread_join(cur_dev->bulk_reader, NULL); + } pthread_mutex_lock(&usb_mutex); iphone_free_device(cur_dev->phone); pthread_mutex_unlock(&usb_mutex); -- cgit v1.1-32-gdbae