From a25009872304f17514089afb48a3e860e7cb9cfe Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Wed, 12 Nov 2014 21:58:30 +0100 Subject: common: Add thread+mutex implementation and use it where applicable --- src/client.c | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) (limited to 'src/client.c') diff --git a/src/client.c b/src/client.c index 4ec4025..baef4c8 100644 --- a/src/client.c +++ b/src/client.c @@ -32,7 +32,6 @@ #include #include #include -#include #include #include @@ -43,6 +42,8 @@ #include "device.h" #include "conf.h" +#include "common/thread.h" + #define CMD_BUF_SIZE 0x10000 #define REPLY_BUF_SIZE 0x10000 @@ -71,7 +72,7 @@ struct mux_client { }; static struct collection client_list; -pthread_mutex_t client_list_mutex; +mutex_t client_list_mutex; /** * Receive raw data from the client socket. @@ -185,9 +186,9 @@ int client_accept(int listenfd) client->state = CLIENT_COMMAND; client->events = POLLIN; - pthread_mutex_lock(&client_list_mutex); + mutex_lock(&client_list_mutex); collection_add(&client_list, client); - pthread_mutex_unlock(&client_list_mutex); + mutex_unlock(&client_list_mutex); #ifdef SO_PEERCRED if (log_level >= LL_INFO) { @@ -220,19 +221,19 @@ void client_close(struct mux_client *client) free(client->ob_buf); if(client->ib_buf) free(client->ib_buf); - pthread_mutex_lock(&client_list_mutex); + mutex_lock(&client_list_mutex); collection_remove(&client_list, client); - pthread_mutex_unlock(&client_list_mutex); + mutex_unlock(&client_list_mutex); free(client); } void client_get_fds(struct fdlist *list) { - pthread_mutex_lock(&client_list_mutex); + mutex_lock(&client_list_mutex); FOREACH(struct mux_client *client, &client_list) { fdlist_add(list, FD_CLIENT, client->fd, client->events); } ENDFOREACH - pthread_mutex_unlock(&client_list_mutex); + mutex_unlock(&client_list_mutex); } static int send_pkt(struct mux_client *client, uint32_t tag, enum usbmuxd_msgtype msg, void *payload, int payload_length) @@ -758,14 +759,14 @@ static void process_recv(struct mux_client *client) void client_process(int fd, short events) { struct mux_client *client = NULL; - pthread_mutex_lock(&client_list_mutex); + mutex_lock(&client_list_mutex); FOREACH(struct mux_client *lc, &client_list) { if(lc->fd == fd) { client = lc; break; } } ENDFOREACH - pthread_mutex_unlock(&client_list_mutex); + mutex_unlock(&client_list_mutex); if(!client) { usbmuxd_log(LL_INFO, "client_process: fd %d not found in client list", fd); @@ -787,33 +788,33 @@ void client_process(int fd, short events) void client_device_add(struct device_info *dev) { - pthread_mutex_lock(&client_list_mutex); + mutex_lock(&client_list_mutex); usbmuxd_log(LL_DEBUG, "client_device_add: id %d, location 0x%x, serial %s", dev->id, dev->location, dev->serial); device_set_visible(dev->id); FOREACH(struct mux_client *client, &client_list) { if(client->state == CLIENT_LISTEN) notify_device_add(client, dev); } ENDFOREACH - pthread_mutex_unlock(&client_list_mutex); + mutex_unlock(&client_list_mutex); } void client_device_remove(int device_id) { - pthread_mutex_lock(&client_list_mutex); + mutex_lock(&client_list_mutex); uint32_t id = device_id; usbmuxd_log(LL_DEBUG, "client_device_remove: id %d", device_id); FOREACH(struct mux_client *client, &client_list) { if(client->state == CLIENT_LISTEN) notify_device_remove(client, id); } ENDFOREACH - pthread_mutex_unlock(&client_list_mutex); + mutex_unlock(&client_list_mutex); } void client_init(void) { usbmuxd_log(LL_DEBUG, "client_init"); collection_init(&client_list); - pthread_mutex_init(&client_list_mutex, NULL); + mutex_init(&client_list_mutex); } void client_shutdown(void) @@ -822,6 +823,6 @@ void client_shutdown(void) FOREACH(struct mux_client *client, &client_list) { client_close(client); } ENDFOREACH - pthread_mutex_destroy(&client_list_mutex); + mutex_destroy(&client_list_mutex); collection_free(&client_list); } -- cgit v1.1-32-gdbae