diff options
| -rw-r--r-- | main.c | 22 |
1 files changed, 16 insertions, 6 deletions
| @@ -244,11 +244,20 @@ static void *usbmuxd_client_reader_thread(void *arg) | |||
| 244 | cursor = rbuffer; | 244 | cursor = rbuffer; |
| 245 | while (rlen > 0) { | 245 | while (rlen > 0) { |
| 246 | len = send_buf(cdata->socket, cursor, rlen); | 246 | len = send_buf(cdata->socket, cursor, rlen); |
| 247 | if (len <= 0) { | ||
| 248 | fprintf(stderr, "Error: send returned %d\n", len); | ||
| 249 | err = 1; | ||
| 250 | break; | ||
| 251 | } | ||
| 247 | // calculate remainder | 252 | // calculate remainder |
| 248 | rlen -= len; | 253 | rlen -= len; |
| 249 | // advance cursor | 254 | // advance cursor |
| 250 | cursor += len; | 255 | cursor += len; |
| 251 | } | 256 | } |
| 257 | if (err != 0) { | ||
| 258 | fprintf(stderr, "Error when writing to client...\n"); | ||
| 259 | break; | ||
| 260 | } | ||
| 252 | fsync(cdata->socket); | 261 | fsync(cdata->socket); |
| 253 | } | 262 | } |
| 254 | 263 | ||
| @@ -432,7 +441,7 @@ leave: | |||
| 432 | static void *usbmuxd_bulk_reader_thread(void *arg) | 441 | static void *usbmuxd_bulk_reader_thread(void *arg) |
| 433 | { | 442 | { |
| 434 | struct device_use_info *cur_dev; | 443 | struct device_use_info *cur_dev; |
| 435 | 444 | ||
| 436 | if (!arg) { | 445 | if (!arg) { |
| 437 | if (verbose >= 3) fprintf(stderr, "%s: Invalid client_data provided\n", __func__); | 446 | if (verbose >= 3) fprintf(stderr, "%s: Invalid client_data provided\n", __func__); |
| 438 | return NULL; | 447 | return NULL; |
| @@ -443,7 +452,7 @@ static void *usbmuxd_bulk_reader_thread(void *arg) | |||
| 443 | if (verbose >= 5) fprintf(stderr, "%s: started\n", __func__); | 452 | if (verbose >= 5) fprintf(stderr, "%s: started\n", __func__); |
| 444 | 453 | ||
| 445 | while (!quit_flag && cur_dev) { | 454 | while (!quit_flag && cur_dev) { |
| 446 | 455 | ||
| 447 | pthread_mutex_lock(&cur_dev->mutex); | 456 | pthread_mutex_lock(&cur_dev->mutex); |
| 448 | if (cur_dev->use_count <= 0) { | 457 | if (cur_dev->use_count <= 0) { |
| 449 | pthread_mutex_unlock(&cur_dev->mutex); | 458 | pthread_mutex_unlock(&cur_dev->mutex); |
| @@ -458,7 +467,7 @@ static void *usbmuxd_bulk_reader_thread(void *arg) | |||
| 458 | //} | 467 | //} |
| 459 | } | 468 | } |
| 460 | 469 | ||
| 461 | if (verbose >= 5) fprintf(stderr, "%s: terminated\n", __func__); | 470 | if (verbose >= 0) fprintf(stderr, "%s: terminated\n", __func__); |
| 462 | 471 | ||
| 463 | return NULL; | 472 | return NULL; |
| 464 | } | 473 | } |
| @@ -726,7 +735,7 @@ leave: | |||
| 726 | if (cur_dev) { | 735 | if (cur_dev) { |
| 727 | pthread_mutex_lock(&cur_dev->mutex); | 736 | pthread_mutex_lock(&cur_dev->mutex); |
| 728 | if (cur_dev->use_count > 1) { | 737 | if (cur_dev->use_count > 1) { |
| 729 | if (verbose >= 5) fprintf(stderr, "%s: decreasing device use count\n", __func__); | 738 | if (verbose >= 0) fprintf(stderr, "%s: decreasing device use count (from %d to %d)\n", __func__, cur_dev->use_count, cur_dev->use_count-1); |
| 730 | cur_dev->use_count--; | 739 | cur_dev->use_count--; |
| 731 | pthread_mutex_unlock(&cur_dev->mutex); | 740 | pthread_mutex_unlock(&cur_dev->mutex); |
| 732 | } else { | 741 | } else { |
| @@ -734,6 +743,7 @@ leave: | |||
| 734 | cur_dev->use_count = 0; | 743 | cur_dev->use_count = 0; |
| 735 | pthread_mutex_unlock(&cur_dev->mutex); | 744 | pthread_mutex_unlock(&cur_dev->mutex); |
| 736 | if (cur_dev->bulk_reader != 0) { | 745 | if (cur_dev->bulk_reader != 0) { |
| 746 | fprintf(stderr, "%s: joining bulk_reader...\n", __func__); | ||
| 737 | pthread_join(cur_dev->bulk_reader, NULL); | 747 | pthread_join(cur_dev->bulk_reader, NULL); |
| 738 | } | 748 | } |
| 739 | pthread_mutex_lock(&usb_mutex); | 749 | pthread_mutex_lock(&usb_mutex); |
| @@ -1035,7 +1045,7 @@ int main(int argc, char **argv) | |||
| 1035 | memset(children, 0, sizeof(struct client_data*) * children_capacity); | 1045 | memset(children, 0, sizeof(struct client_data*) * children_capacity); |
| 1036 | 1046 | ||
| 1037 | if (verbose >= 2) logmsg(LOG_NOTICE, "waiting for connection"); | 1047 | if (verbose >= 2) logmsg(LOG_NOTICE, "waiting for connection"); |
| 1038 | while (!quit_flag) { | 1048 | while (!quit_flag) { |
| 1039 | // Check the file descriptor before accepting a connection. | 1049 | // Check the file descriptor before accepting a connection. |
| 1040 | // If no connection attempt is made, just repeat... | 1050 | // If no connection attempt is made, just repeat... |
| 1041 | result = check_fd(fsock, FD_READ, 1000); | 1051 | result = check_fd(fsock, FD_READ, 1000); |
| @@ -1119,7 +1129,7 @@ int main(int argc, char **argv) | |||
| 1119 | if (verbose >= 2) fprintf(stderr, "usbmuxd: waiting for child threads to terminate...\n"); | 1129 | if (verbose >= 2) fprintf(stderr, "usbmuxd: waiting for child threads to terminate...\n"); |
| 1120 | for (i = 0; i < children_capacity; i++) { | 1130 | for (i = 0; i < children_capacity; i++) { |
| 1121 | if (children[i] != NULL) { | 1131 | if (children[i] != NULL) { |
| 1122 | pthread_join(children[i]->thread, NULL); | 1132 | pthread_join(children[i]->thread, NULL); |
| 1123 | free(children[i]); | 1133 | free(children[i]); |
| 1124 | } | 1134 | } |
| 1125 | } | 1135 | } |
