diff options
author | Nikias Bassen | 2012-04-05 13:58:18 +0200 |
---|---|---|
committer | Nikias Bassen | 2012-04-05 13:58:18 +0200 |
commit | cd07d72075739d6b59238d16fde6d02a1b97dbb9 (patch) | |
tree | c14160d287a0b01dd6dd4843a0a001849624df04 | |
parent | b63c3355bd194d1df83b2f5aa0affab411397dd4 (diff) | |
download | usbmuxd-cd07d72075739d6b59238d16fde6d02a1b97dbb9.tar.gz usbmuxd-cd07d72075739d6b59238d16fde6d02a1b97dbb9.tar.bz2 |
libusbmuxd: fix usbmuxd_unsubscribe() by using shutdown() instead of SIGINT
-rw-r--r-- | libusbmuxd/libusbmuxd.c | 10 | ||||
-rw-r--r-- | libusbmuxd/sock_stuff.c | 5 | ||||
-rw-r--r-- | libusbmuxd/sock_stuff.h | 8 |
3 files changed, 18 insertions, 5 deletions
diff --git a/libusbmuxd/libusbmuxd.c b/libusbmuxd/libusbmuxd.c index 172da80..02aa750 100644 --- a/libusbmuxd/libusbmuxd.c +++ b/libusbmuxd/libusbmuxd.c @@ -602,6 +602,9 @@ static void *device_monitor(void *data) collection_free(&devices); + close_socket(listenfd); + listenfd = -1; + return NULL; } @@ -634,17 +637,14 @@ int usbmuxd_unsubscribe() { event_cb = NULL; + shutdown_socket(listenfd, SHUT_RDWR); + #ifdef WIN32 if (devmon != NULL) { - close_socket(listenfd); - listenfd = -1; WaitForSingleObject(devmon, INFINITE); } #else if (pthread_kill(devmon, 0) == 0) { - close_socket(listenfd); - listenfd = -1; - pthread_kill(devmon, SIGINT); pthread_join(devmon, NULL); } #endif diff --git a/libusbmuxd/sock_stuff.c b/libusbmuxd/sock_stuff.c index edc738e..609c8ad 100644 --- a/libusbmuxd/sock_stuff.c +++ b/libusbmuxd/sock_stuff.c @@ -321,6 +321,11 @@ int check_fd(int fd, fd_mode fdm, unsigned int timeout) return sret; } +int shutdown_socket(int fd, int how) +{ + return shutdown(fd, how); +} + int close_socket(int fd) { #ifdef WIN32 return closesocket(fd); diff --git a/libusbmuxd/sock_stuff.h b/libusbmuxd/sock_stuff.h index eb9622c..5efcd27 100644 --- a/libusbmuxd/sock_stuff.h +++ b/libusbmuxd/sock_stuff.h @@ -33,6 +33,13 @@ enum fd_mode { }; typedef enum fd_mode fd_mode; +#ifdef WIN32 +#include <winsock2.h> +#define SHUT_RD SD_READ +#define SHUT_WR SD_WRITE +#define SHUT_RDWR SD_BOTH +#endif + #ifndef WIN32 int create_unix_socket(const char *filename); int connect_unix_socket(const char *filename); @@ -43,6 +50,7 @@ int connect_socket(const char *addr, uint16_t port); #endif int check_fd(int fd, fd_mode fdm, unsigned int timeout); +int shutdown_socket(int fd, int how); int close_socket(int fd); int recv_buf(int fd, void *data, size_t size); |