Changeset ccb5165 in mainline


Ignore:
Timestamp:
2013-04-20T07:28:39Z (11 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().

Location:
uspace/srv/net
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/dnsres/transport.c

    r6d717a4 rccb5165  
    4545
    4646#include <stdio.h>
     47
     48#define RECV_BUF_SIZE 4096
     49
     50static uint8_t recv_buf[RECV_BUF_SIZE];
     51
    4752int dns_request(dns_message_t *req, dns_message_t **rresp)
    4853{
     
    5358        struct sockaddr_in addr;
    5459        struct sockaddr_in laddr;
     60        struct sockaddr_in src_addr;
     61        socklen_t src_addr_size;
    5562        int fd;
    5663
     
    8693                goto error;
    8794
     95        src_addr_size = sizeof(src_addr);
     96        rc = recvfrom(fd, recv_buf, RECV_BUF_SIZE, 0,
     97            (struct sockaddr *)&src_addr, &src_addr_size);
     98        if (rc < 0) {
     99                printf("recvfrom returns error - %d\n", rc);
     100                goto error;
     101        }
     102
     103        printf("received %d bytes\n", (int)rc);
     104
     105        printf("close socket\n");
    88106        closesocket(fd);
     107        printf("free req_data\n");
    89108        free(req_data);
    90109
  • 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.