Changeset 4747
- Timestamp:
- 05/11/07 01:45:25 (1 year ago)
- Files:
-
- wired/trunk/wired/chats.c (modified) (4 diffs)
- wired/trunk/wired/clients.c (modified) (11 diffs)
- wired/trunk/wired/commands.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
wired/trunk/wired/chats.c
r4740 r4747 42 42 wi_array_t *clients; 43 43 44 wi_r wlock_t*lock;44 wi_recursive_lock_t *lock; 45 45 }; 46 46 … … 183 183 static wd_chat_t * wd_chat_init(wd_chat_t *chat) { 184 184 chat->clients = wi_array_init(wi_array_alloc()); 185 chat->lock = wi_r wlock_init(wi_rwlock_alloc());185 chat->lock = wi_recursive_lock_init(wi_recursive_lock_alloc()); 186 186 187 187 return chat; … … 384 384 385 385 void wd_chat_set_topic(wd_chat_t *chat, wd_topic_t *topic) { 386 wi_r wlock_wrlock(chat->lock);386 wi_recursive_lock_lock(chat->lock); 387 387 wi_retain(topic); 388 388 wi_release(chat->topic); 389 389 chat->topic = topic; 390 wi_r wlock_unlock(chat->lock);390 wi_recursive_lock_unlock(chat->lock); 391 391 } 392 392 … … 396 396 wd_topic_t *topic; 397 397 398 wi_r wlock_rdlock(chat->lock);398 wi_recursive_lock_lock(chat->lock); 399 399 topic = wi_autorelease(wi_retain(chat->topic)); 400 wi_r wlock_unlock(chat->lock);400 wi_recursive_lock_unlock(chat->lock); 401 401 402 402 return topic; wired/trunk/wired/clients.c
r4740 r4747 47 47 #define WD_CLIENT_SET_VALUE(dst, src) \ 48 48 WI_STMT_START \ 49 wi_r wlock_wrlock(client->client_lock);\49 wi_recursive_lock_lock(client->client_lock); \ 50 50 (dst) = (src); \ 51 wi_r wlock_unlock(client->client_lock);\51 wi_recursive_lock_unlock(client->client_lock); \ 52 52 WI_STMT_END 53 53 54 54 #define WD_CLIENT_SET_OBJECT(dst, src) \ 55 55 WI_STMT_START \ 56 wi_r wlock_wrlock(client->client_lock);\56 wi_recursive_lock_lock(client->client_lock); \ 57 57 wi_retain((src)); \ 58 58 wi_release((dst)); \ 59 59 (dst) = (src); \ 60 wi_r wlock_unlock(client->client_lock);\60 wi_recursive_lock_unlock(client->client_lock); \ 61 61 WI_STMT_END 62 62 … … 65 65 typeof(src) _value; \ 66 66 \ 67 wi_r wlock_rdlock(client->client_lock);\67 wi_recursive_lock_lock(client->client_lock); \ 68 68 _value = (src); \ 69 wi_r wlock_unlock(client->client_lock);\69 wi_recursive_lock_unlock(client->client_lock); \ 70 70 \ 71 71 return _value; \ … … 76 76 typeof(src) _object; \ 77 77 \ 78 wi_r wlock_rdlock(client->client_lock);\78 wi_recursive_lock_lock(client->client_lock); \ 79 79 _object = wi_autorelease(wi_retain((src))); \ 80 wi_r wlock_unlock(client->client_lock);\80 wi_recursive_lock_unlock(client->client_lock); \ 81 81 \ 82 82 return _object; \ … … 88 88 wi_runtime_base_t base; 89 89 90 wi_r wlock_t*client_lock;90 wi_recursive_lock_t *client_lock; 91 91 wi_lock_t *socket_lock; 92 92 … … 179 179 180 180 while((client = wi_enumerator_next_data(enumerator))) { 181 wi_r wlock_wrlock(client->client_lock);181 wi_recursive_lock_lock(client->client_lock); 182 182 183 183 if(client->state == WD_CLIENT_STATE_LOGGED_IN && … … 189 189 } 190 190 191 wi_r wlock_unlock(client->client_lock);191 wi_recursive_lock_unlock(client->client_lock); 192 192 } 193 193 } … … 202 202 void wd_clients_add_client(wd_client_t *client) { 203 203 wi_hash_wrlock(wd_clients); 204 wi_hash_set_data_for_key(wd_clients, client, wi_number_with_int32( client->uid));204 wi_hash_set_data_for_key(wd_clients, client, wi_number_with_int32(wd_client_uid(client))); 205 205 wi_hash_unlock(wd_clients); 206 206 } … … 213 213 214 214 wi_hash_wrlock(wd_clients); 215 wi_hash_remove_data_for_key(wd_clients, wi_number_with_int32( client->uid));215 wi_hash_remove_data_for_key(wd_clients, wi_number_with_int32(wd_client_uid(client))); 216 216 wi_hash_unlock(wd_clients); 217 217 } … … 286 286 client->host = wi_retain(wi_address_hostname(address)); 287 287 288 client->client_lock = wi_r wlock_init(wi_rwlock_alloc());288 client->client_lock = wi_recursive_lock_init(wi_recursive_lock_alloc()); 289 289 client->socket_lock = wi_lock_init(wi_lock_alloc()); 290 290 … … 357 357 void wd_client_broadcast_status(wd_client_t *client) { 358 358 wd_broadcast(wd_public_chat, 304, WI_STR("%u%c%u%c%u%c%u%c%#@%c%#@"), 359 client->uid,WD_FIELD_SEPARATOR,360 client->idle, WD_FIELD_SEPARATOR,361 client->admin,WD_FIELD_SEPARATOR,362 client->icon, WD_FIELD_SEPARATOR,363 client->nick, WD_FIELD_SEPARATOR,364 client->status);359 wd_client_uid(client), WD_FIELD_SEPARATOR, 360 wd_client_is_idle(client), WD_FIELD_SEPARATOR, 361 wd_client_is_admin(client), WD_FIELD_SEPARATOR, 362 wd_client_icon(client), WD_FIELD_SEPARATOR, 363 wd_client_nick(client), WD_FIELD_SEPARATOR, 364 wd_client_status(client)); 365 365 } 366 366 … … 567 567 wi_string_t *identifier; 568 568 569 wi_r wlock_rdlock(client->client_lock);569 wi_recursive_lock_lock(client->client_lock); 570 570 identifier = wi_string_with_format(WI_STR("%@/%@/%@"), client->nick, client->login, client->ip); 571 wi_r wlock_unlock(client->client_lock);571 wi_recursive_lock_unlock(client->client_lock); 572 572 573 573 return identifier; wired/trunk/wired/commands.c
r4740 r4747 1386 1386 wi_string_t *password; 1387 1387 wd_account_t *account; 1388 wd_chat_t *chat;1389 1388 1390 1389 if(wd_client_state(client) != WD_CLIENT_STATE_GAVE_USER)
