summaryrefslogtreecommitdiffstats
path: root/src/main.c
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2009-06-20 04:29:23 +0200
committerGravatar Nikias Bassen2009-06-20 04:29:23 +0200
commit94d700159d010176a57640d6f59476aaf43875fc (patch)
treee215eab15d5857b7eb7ef82deebee73cc3cbc1eb /src/main.c
parentbb33ccdf06f261dca033d70772bc256c890c76f7 (diff)
downloadusbmuxd-94d700159d010176a57640d6f59476aaf43875fc.tar.gz
usbmuxd-94d700159d010176a57640d6f59476aaf43875fc.tar.bz2
hopefully fixed race condition on connection setup
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c22
1 files changed, 22 insertions, 0 deletions
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)
719 logmsg(LOG_NOTICE, 719 logmsg(LOG_NOTICE,
720 "%s[%x]: No attached iPhone/iPod devices found.", 720 "%s[%x]: No attached iPhone/iPod devices found.",
721 __func__, THREAD); 721 __func__, THREAD);
722 usbmuxd_send_result(cdata->socket, s_req->header.tag, -ENODEV);
722 goto leave; 723 goto leave;
723 } 724 }
724 725
@@ -846,6 +847,27 @@ static void *usbmuxd_client_init_thread(void *arg)
846 } 847 }
847 pthread_mutex_unlock(&cur_dev->mutex); 848 pthread_mutex_unlock(&cur_dev->mutex);
848 849
850 // wait for the initial handshake (SYN->SYN+ACK->ACKto complete
851 struct timespec ts;
852 ts.tv_sec = 0;
853 ts.tv_nsec = 100000000;
854
855 i = 0;
856 printf("waiting for handshake to complete...\n");
857 while (i < 10000) {
858 if (usbmux_is_connected(cdata->muxclient)) {
859 printf("handshake done\n");
860 break;
861 }
862 nanosleep(&ts, NULL);
863 i+=100;
864 }
865 if (!usbmux_is_connected(cdata->muxclient)) {
866 printf("handshake failed\n");
867 usbmuxd_send_result(cdata->socket, c_req->header.tag, -ENOTCONN);
868 goto leave;
869 }
870
849 // start connection handler thread 871 // start connection handler thread
850 cdata->handler_dead = 0; 872 cdata->handler_dead = 0;
851 cdata->tag = c_req->header.tag; 873 cdata->tag = c_req->header.tag;