Changeset ccb5165 in mainline for uspace/srv/net/udp/sock.c


Ignore:
Timestamp:
2013-04-20T07:28:39Z (12 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0041cd6d
Parents:
6d717a4
Message:

Do not hold recv_buffer_lock while calling udp_uc_receive().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/udp/sock.c

    r6d717a4 rccb5165  
    538538        int socket_id = SOCKET_GET_SOCKET_ID(call);
    539539
     540        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close() - find core");
    540541        socket_core_t *sock_core =
    541542            socket_cores_find(&client->sockets, socket_id);
    542543        if (sock_core == NULL) {
     544        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close() - core not found");
    543545                async_answer_0(callid, ENOTSOCK);
    544546                return;
    545547        }
    546548
     549        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close() - spec data");
    547550        udp_sockdata_t *socket =
    548551            (udp_sockdata_t *) sock_core->specific_data;
     552        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close() - lock socket");
    549553        fibril_mutex_lock(&socket->lock);
    550554
     555        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close() - lock socket buffer");
    551556        fibril_mutex_lock(&socket->recv_buffer_lock);
    552557        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_close - set socket->sock_core = NULL");
     
    601606                            &sock->recv_buffer_lock);
    602607                }
    603                
     608
     609                fibril_mutex_unlock(&sock->recv_buffer_lock);
     610
    604611                log_msg(LOG_DEFAULT, LVL_DEBUG, "[] call udp_uc_receive()");
    605612                urc = udp_uc_receive(sock->assoc, sock->recv_buffer,
    606613                    UDP_FRAGMENT_SIZE, &rcvd, &xflags, &sock->recv_fsock);
     614                fibril_mutex_lock(&sock->recv_buffer_lock);
    607615                sock->recv_error = urc;
    608616
     
    611619                if (sock->sock_core != NULL)
    612620                        udp_sock_notify_data(sock->sock_core);
    613                
     621
    614622                if (urc != UDP_EOK) {
    615623                        log_msg(LOG_DEFAULT, LVL_DEBUG, "[] urc != UDP_EOK, break");
     
    617625                        break;
    618626                }
    619                
     627
    620628                log_msg(LOG_DEFAULT, LVL_DEBUG, "[] got data - broadcast recv_buffer_cv");
    621                
     629
    622630                sock->recv_buffer_used = rcvd;
    623631                fibril_condvar_broadcast(&sock->recv_buffer_cv);
Note: See TracChangeset for help on using the changeset viewer.