From 94d700159d010176a57640d6f59476aaf43875fc Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Sat, 20 Jun 2009 04:29:23 +0200 Subject: hopefully fixed race condition on connection setup --- src/main.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index 1a62f17..8e27d8f 100644 --- a/src/main.c +++ b/src/main.c @@ -719,6 +719,7 @@ static void *usbmuxd_client_init_thread(void *arg) logmsg(LOG_NOTICE, "%s[%x]: No attached iPhone/iPod devices found.", __func__, THREAD); + usbmuxd_send_result(cdata->socket, s_req->header.tag, -ENODEV); goto leave; } @@ -846,6 +847,27 @@ static void *usbmuxd_client_init_thread(void *arg) } pthread_mutex_unlock(&cur_dev->mutex); + // wait for the initial handshake (SYN->SYN+ACK->ACKto complete + struct timespec ts; + ts.tv_sec = 0; + ts.tv_nsec = 100000000; + + i = 0; + printf("waiting for handshake to complete...\n"); + while (i < 10000) { + if (usbmux_is_connected(cdata->muxclient)) { + printf("handshake done\n"); + break; + } + nanosleep(&ts, NULL); + i+=100; + } + if (!usbmux_is_connected(cdata->muxclient)) { + printf("handshake failed\n"); + usbmuxd_send_result(cdata->socket, c_req->header.tag, -ENOTCONN); + goto leave; + } + // start connection handler thread cdata->handler_dead = 0; cdata->tag = c_req->header.tag; -- cgit v1.1-32-gdbae