summaryrefslogtreecommitdiffstats
path: root/src/AFC.c
diff options
context:
space:
mode:
authorGravatar Jonathan Beck2008-09-14 22:23:01 +0200
committerGravatar Jonathan Beck2008-10-25 17:43:47 +0200
commit587990158fe0a7ee9a8ee086d83d1d61d61cc56b (patch)
treeedbb0422140e5df84b3e547984b7f87833619757 /src/AFC.c
parent0691e6e4cee6f0e54b432fbf0e478d699e964eaf (diff)
downloadlibimobiledevice-587990158fe0a7ee9a8ee086d83d1d61d61cc56b.tar.gz
libimobiledevice-587990158fe0a7ee9a8ee086d83d1d61d61cc56b.tar.bz2
Change lock to mutex and add tool to check AFC in multithreaded env.
Diffstat (limited to 'src/AFC.c')
-rw-r--r--src/AFC.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/AFC.c b/src/AFC.c
index 4d6b269..144efe1 100644
--- a/src/AFC.c
+++ b/src/AFC.c
@@ -34,10 +34,11 @@ const int MAXIMUM_PACKET_SIZE = (2 << 15) - 32;
34static void afc_lock(iphone_afc_client_t client) 34static void afc_lock(iphone_afc_client_t client)
35{ 35{
36 log_debug_msg("Locked\n"); 36 log_debug_msg("Locked\n");
37 while (client->lock) { 37 /*while (client->lock) {
38 usleep(500); // they say it's obsolete, but whatever 38 usleep(500); // they say it's obsolete, but whatever
39 } 39 }
40 client->lock = 1; 40 client->lock = 1; */
41 g_mutex_lock(client->mutex);
41} 42}
42 43
43/** Unlocks an AFC client, done for thread safety stuff. 44/** Unlocks an AFC client, done for thread safety stuff.
@@ -47,7 +48,8 @@ static void afc_lock(iphone_afc_client_t client)
47static void afc_unlock(iphone_afc_client_t client) 48static void afc_unlock(iphone_afc_client_t client)
48{ // just to be pretty 49{ // just to be pretty
49 log_debug_msg("Unlocked\n"); 50 log_debug_msg("Unlocked\n");
50 client->lock = 0; 51 //client->lock = 0;
52 g_mutex_unlock(client->mutex);
51} 53}
52 54
53/** Makes a connection to the AFC service on the phone. 55/** Makes a connection to the AFC service on the phone.
@@ -61,6 +63,10 @@ static void afc_unlock(iphone_afc_client_t client)
61iphone_error_t iphone_afc_new_client(iphone_device_t device, int src_port, int dst_port, iphone_afc_client_t * client) 63iphone_error_t iphone_afc_new_client(iphone_device_t device, int src_port, int dst_port, iphone_afc_client_t * client)
62{ 64{
63 int ret = IPHONE_E_SUCCESS; 65 int ret = IPHONE_E_SUCCESS;
66
67 //makes sure thread environment is available
68 if (!g_thread_supported())
69 g_thread_init(NULL);
64 iphone_afc_client_t client_loc = (iphone_afc_client_t) malloc(sizeof(struct iphone_afc_client_int)); 70 iphone_afc_client_t client_loc = (iphone_afc_client_t) malloc(sizeof(struct iphone_afc_client_int));
65 71
66 if (!device) 72 if (!device)
@@ -92,6 +98,7 @@ iphone_error_t iphone_afc_new_client(iphone_device_t device, int src_port, int d
92 client_loc->afc_packet->header2 = 0x4141504C; 98 client_loc->afc_packet->header2 = 0x4141504C;
93 client_loc->file_handle = 0; 99 client_loc->file_handle = 0;
94 client_loc->lock = 0; 100 client_loc->lock = 0;
101 client_loc->mutex = g_mutex_new();
95 102
96 *client = client_loc; 103 *client = client_loc;
97 return IPHONE_E_SUCCESS; 104 return IPHONE_E_SUCCESS;