Changes in / [7d31f7c:91001e2] in mainline


Ignore:
Location:
uspace/srv/net
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/socket/socket_client.c

    r7d31f7c r91001e2  
    560560                fibril_rwlock_write_unlock( & socket_globals.lock );
    561561                fibril_condvar_wait( & socket->accept_signal, & socket->accept_lock );
    562                 // drop the accept lock to avoid deadlock
    563                 fibril_mutex_unlock( & socket->accept_lock );
    564562                fibril_rwlock_write_lock( & socket_globals.lock );
    565                 fibril_mutex_lock( & socket->accept_lock );
    566563        }
    567564        -- socket->blocked;
     
    762759                fibril_rwlock_read_unlock( & socket_globals.lock );
    763760                fibril_condvar_wait( & socket->receive_signal, & socket->receive_lock );
    764                 // drop the receive lock to avoid deadlock
    765                 fibril_mutex_unlock( & socket->receive_lock );
    766761                fibril_rwlock_read_lock( & socket_globals.lock );
    767                 fibril_mutex_lock( & socket->receive_lock );
    768762        }
    769763        -- socket->blocked;
  • uspace/srv/net/tl/icmp/icmp.c

    r7d31f7c r91001e2  
    343343                result = ERROR_CODE;
    344344
    345                 // drop the reply mutex
    346                 fibril_mutex_unlock( & reply->mutex );
    347345                // lock the globals again and clean up
    348346                fibril_rwlock_write_lock( & icmp_globals.lock );
  • uspace/srv/net/tl/udp/udp.c

    r7d31f7c r91001e2  
    420420        struct sockaddr *               addr;
    421421        size_t                                  addrlen;
     422        fibril_rwlock_t                 lock;
    422423        ipc_call_t                              answer;
    423424        int                                             answer_count;
     
    433434
    434435        socket_cores_initialize( & local_sockets );
     436        fibril_rwlock_initialize( & lock );
    435437
    436438        while( keep_on_going ){
     
    447449                                break;
    448450                        case NET_SOCKET:
     451                                fibril_rwlock_write_lock( & lock );
    449452                                * SOCKET_SET_SOCKET_ID( answer ) = SOCKET_GET_SOCKET_ID( call );
    450453                                res = socket_create( & local_sockets, app_phone, NULL, SOCKET_SET_SOCKET_ID( answer ));
     454                                fibril_rwlock_write_unlock( & lock );
    451455                                if( res == EOK ){
    452456                                        if( tl_get_ip_packet_dimension( udp_globals.ip_phone, & udp_globals.dimensions, DEVICE_INVALID_ID, & packet_dimension ) == EOK ){
     
    461465                                res = data_receive(( void ** ) & addr, & addrlen );
    462466                                if( res == EOK ){
     467                                        fibril_rwlock_read_lock( & lock );
    463468                                        fibril_rwlock_write_lock( & udp_globals.lock );
    464469                                        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 );
    465470                                        fibril_rwlock_write_unlock( & udp_globals.lock );
     471                                        fibril_rwlock_read_unlock( & lock );
    466472                                        free( addr );
    467473                                }
     
    470476                                res = data_receive(( void ** ) & addr, & addrlen );
    471477                                if( res == EOK ){
     478                                        fibril_rwlock_read_lock( & lock );
    472479                                        fibril_rwlock_write_lock( & udp_globals.lock );
    473480                                        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 ));
     
    477484                                                answer_count = 2;
    478485                                        }
     486                                        fibril_rwlock_read_unlock( & lock );
    479487                                        free( addr );
    480488                                }
    481489                                break;
    482490                        case NET_SOCKET_RECVFROM:
     491                                fibril_rwlock_read_lock( & lock );
    483492                                fibril_rwlock_write_lock( & udp_globals.lock );
    484493                                res = udp_recvfrom_message( & local_sockets, SOCKET_GET_SOCKET_ID( call ), SOCKET_GET_FLAGS( call ), & addrlen );
    485494                                fibril_rwlock_write_unlock( & udp_globals.lock );
     495                                fibril_rwlock_read_unlock( & lock );
    486496                                if( res > 0 ){
    487497                                        * SOCKET_SET_READ_DATA_LENGTH( answer ) = res;
     
    492502                                break;
    493503                        case NET_SOCKET_CLOSE:
     504                                fibril_rwlock_write_lock( & lock );
    494505                                fibril_rwlock_write_lock( & udp_globals.lock );
    495506                                res = socket_destroy( udp_globals.net_phone, SOCKET_GET_SOCKET_ID( call ), & local_sockets, & udp_globals.sockets, NULL );
    496507                                fibril_rwlock_write_unlock( & udp_globals.lock );
     508                                fibril_rwlock_write_unlock( & lock );
    497509                                break;
    498510                        case NET_SOCKET_GETSOCKOPT:
Note: See TracChangeset for help on using the changeset viewer.