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


Ignore:
Timestamp:
2013-05-30T17:13:02Z (11 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
98abd40
Parents:
be2bb4f (diff), 94dfb92 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline changes

File:
1 edited

Legend:

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

    rbe2bb4f rb8e72fd1  
    537537        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close()");
    538538        int socket_id = SOCKET_GET_SOCKET_ID(call);
    539        
     539
     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        }
    546        
     548
     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);
    550        
     554
     555        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_sock_close() - lock socket buffer");
     556        fibril_mutex_lock(&socket->recv_buffer_lock);
     557        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_close - set socket->sock_core = NULL");
     558        socket->sock_core = NULL;
     559        fibril_mutex_unlock(&socket->recv_buffer_lock);
     560
     561        udp_uc_reset(socket->assoc);
     562
    551563        int rc = socket_destroy(NULL, socket_id, &client->sockets, &gsock,
    552564            udp_free_sock_data);
    553565        if (rc != EOK) {
     566                log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_close - socket_destroy failed");
    554567                fibril_mutex_unlock(&socket->lock);
    555568                async_answer_0(callid, rc);
    556569                return;
    557570        }
    558        
     571
     572        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_close - broadcast recv_buffer_cv");
     573        fibril_condvar_broadcast(&socket->recv_buffer_cv);
     574
    559575        fibril_mutex_unlock(&socket->lock);
    560576        async_answer_0(callid, EOK);
     
    582598        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_recv_fibril()");
    583599
     600        fibril_mutex_lock(&sock->recv_buffer_lock);
     601
    584602        while (true) {
    585603                log_msg(LOG_DEFAULT, LVL_DEBUG, "[] wait for rcv buffer empty()");
    586                 fibril_mutex_lock(&sock->recv_buffer_lock);
    587                 while (sock->recv_buffer_used != 0) {
     604                while (sock->recv_buffer_used != 0 && sock->sock_core != NULL) {
    588605                        fibril_condvar_wait(&sock->recv_buffer_cv,
    589606                            &sock->recv_buffer_lock);
    590607                }
    591                
     608
     609                fibril_mutex_unlock(&sock->recv_buffer_lock);
     610
    592611                log_msg(LOG_DEFAULT, LVL_DEBUG, "[] call udp_uc_receive()");
    593612                urc = udp_uc_receive(sock->assoc, sock->recv_buffer,
    594613                    UDP_FRAGMENT_SIZE, &rcvd, &xflags, &sock->recv_fsock);
     614                fibril_mutex_lock(&sock->recv_buffer_lock);
    595615                sock->recv_error = urc;
    596                
    597                 udp_sock_notify_data(sock->sock_core);
    598                
     616
     617                log_msg(LOG_DEFAULT, LVL_DEBUG, "[] udp_uc_receive -> %d", urc);
     618
     619                if (sock->sock_core != NULL)
     620                        udp_sock_notify_data(sock->sock_core);
     621
    599622                if (urc != UDP_EOK) {
     623                        log_msg(LOG_DEFAULT, LVL_DEBUG, "[] urc != UDP_EOK, break");
    600624                        fibril_condvar_broadcast(&sock->recv_buffer_cv);
    601                         fibril_mutex_unlock(&sock->recv_buffer_lock);
    602                         break;
    603                 }
    604                
     625                        break;
     626                }
     627
    605628                log_msg(LOG_DEFAULT, LVL_DEBUG, "[] got data - broadcast recv_buffer_cv");
    606                
     629
    607630                sock->recv_buffer_used = rcvd;
    608                 fibril_mutex_unlock(&sock->recv_buffer_lock);
    609631                fibril_condvar_broadcast(&sock->recv_buffer_cv);
    610632        }
    611633
     634        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_recv_fibril() exited loop");
     635        fibril_mutex_unlock(&sock->recv_buffer_lock);
    612636        udp_uc_destroy(sock->assoc);
     637
     638        log_msg(LOG_DEFAULT, LVL_DEBUG, "udp_sock_recv_fibril() terminated");
    613639
    614640        return 0;
Note: See TracChangeset for help on using the changeset viewer.