summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2012-04-05 13:58:18 +0200
committerGravatar Nikias Bassen2012-04-05 13:58:18 +0200
commitcd07d72075739d6b59238d16fde6d02a1b97dbb9 (patch)
treec14160d287a0b01dd6dd4843a0a001849624df04
parentb63c3355bd194d1df83b2f5aa0affab411397dd4 (diff)
downloadusbmuxd-cd07d72075739d6b59238d16fde6d02a1b97dbb9.tar.gz
usbmuxd-cd07d72075739d6b59238d16fde6d02a1b97dbb9.tar.bz2
libusbmuxd: fix usbmuxd_unsubscribe() by using shutdown() instead of SIGINT
-rw-r--r--libusbmuxd/libusbmuxd.c10
-rw-r--r--libusbmuxd/sock_stuff.c5
-rw-r--r--libusbmuxd/sock_stuff.h8
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);