Changes in / [7d31f7c:91001e2] in mainline
- Location:
- uspace/srv/net
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/socket/socket_client.c
r7d31f7c r91001e2 560 560 fibril_rwlock_write_unlock( & socket_globals.lock ); 561 561 fibril_condvar_wait( & socket->accept_signal, & socket->accept_lock ); 562 // drop the accept lock to avoid deadlock563 fibril_mutex_unlock( & socket->accept_lock );564 562 fibril_rwlock_write_lock( & socket_globals.lock ); 565 fibril_mutex_lock( & socket->accept_lock );566 563 } 567 564 -- socket->blocked; … … 762 759 fibril_rwlock_read_unlock( & socket_globals.lock ); 763 760 fibril_condvar_wait( & socket->receive_signal, & socket->receive_lock ); 764 // drop the receive lock to avoid deadlock765 fibril_mutex_unlock( & socket->receive_lock );766 761 fibril_rwlock_read_lock( & socket_globals.lock ); 767 fibril_mutex_lock( & socket->receive_lock );768 762 } 769 763 -- socket->blocked; -
uspace/srv/net/tl/icmp/icmp.c
r7d31f7c r91001e2 343 343 result = ERROR_CODE; 344 344 345 // drop the reply mutex346 fibril_mutex_unlock( & reply->mutex );347 345 // lock the globals again and clean up 348 346 fibril_rwlock_write_lock( & icmp_globals.lock ); -
uspace/srv/net/tl/udp/udp.c
r7d31f7c r91001e2 420 420 struct sockaddr * addr; 421 421 size_t addrlen; 422 fibril_rwlock_t lock; 422 423 ipc_call_t answer; 423 424 int answer_count; … … 433 434 434 435 socket_cores_initialize( & local_sockets ); 436 fibril_rwlock_initialize( & lock ); 435 437 436 438 while( keep_on_going ){ … … 447 449 break; 448 450 case NET_SOCKET: 451 fibril_rwlock_write_lock( & lock ); 449 452 * SOCKET_SET_SOCKET_ID( answer ) = SOCKET_GET_SOCKET_ID( call ); 450 453 res = socket_create( & local_sockets, app_phone, NULL, SOCKET_SET_SOCKET_ID( answer )); 454 fibril_rwlock_write_unlock( & lock ); 451 455 if( res == EOK ){ 452 456 if( tl_get_ip_packet_dimension( udp_globals.ip_phone, & udp_globals.dimensions, DEVICE_INVALID_ID, & packet_dimension ) == EOK ){ … … 461 465 res = data_receive(( void ** ) & addr, & addrlen ); 462 466 if( res == EOK ){ 467 fibril_rwlock_read_lock( & lock ); 463 468 fibril_rwlock_write_lock( & udp_globals.lock ); 464 469 res = socket_bind( & local_sockets, & udp_globals.sockets, SOCKET_GET_SOCKET_ID( call ), addr, addrlen, UDP_FREE_PORTS_START, UDP_FREE_PORTS_END, udp_globals.last_used_port ); 465 470 fibril_rwlock_write_unlock( & udp_globals.lock ); 471 fibril_rwlock_read_unlock( & lock ); 466 472 free( addr ); 467 473 } … … 470 476 res = data_receive(( void ** ) & addr, & addrlen ); 471 477 if( res == EOK ){ 478 fibril_rwlock_read_lock( & lock ); 472 479 fibril_rwlock_write_lock( & udp_globals.lock ); 473 480 res = udp_sendto_message( & local_sockets, SOCKET_GET_SOCKET_ID( call ), addr, addrlen, SOCKET_GET_DATA_FRAGMENTS( call ), SOCKET_SET_DATA_FRAGMENT_SIZE( answer ), SOCKET_GET_FLAGS( call )); … … 477 484 answer_count = 2; 478 485 } 486 fibril_rwlock_read_unlock( & lock ); 479 487 free( addr ); 480 488 } 481 489 break; 482 490 case NET_SOCKET_RECVFROM: 491 fibril_rwlock_read_lock( & lock ); 483 492 fibril_rwlock_write_lock( & udp_globals.lock ); 484 493 res = udp_recvfrom_message( & local_sockets, SOCKET_GET_SOCKET_ID( call ), SOCKET_GET_FLAGS( call ), & addrlen ); 485 494 fibril_rwlock_write_unlock( & udp_globals.lock ); 495 fibril_rwlock_read_unlock( & lock ); 486 496 if( res > 0 ){ 487 497 * SOCKET_SET_READ_DATA_LENGTH( answer ) = res; … … 492 502 break; 493 503 case NET_SOCKET_CLOSE: 504 fibril_rwlock_write_lock( & lock ); 494 505 fibril_rwlock_write_lock( & udp_globals.lock ); 495 506 res = socket_destroy( udp_globals.net_phone, SOCKET_GET_SOCKET_ID( call ), & local_sockets, & udp_globals.sockets, NULL ); 496 507 fibril_rwlock_write_unlock( & udp_globals.lock ); 508 fibril_rwlock_write_unlock( & lock ); 497 509 break; 498 510 case NET_SOCKET_GETSOCKOPT:
Note:
See TracChangeset
for help on using the changeset viewer.