diff options
| author | 2009-06-20 04:29:23 +0200 | |
|---|---|---|
| committer | 2009-06-20 04:29:23 +0200 | |
| commit | 94d700159d010176a57640d6f59476aaf43875fc (patch) | |
| tree | e215eab15d5857b7eb7ef82deebee73cc3cbc1eb /src/main.c | |
| parent | bb33ccdf06f261dca033d70772bc256c890c76f7 (diff) | |
| download | usbmuxd-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.c | 22 |
1 files changed, 22 insertions, 0 deletions
| @@ -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; |
