Changeset 141a20d in mainline for uspace/srv/net/udp/sock.c
- Timestamp:
- 2012-08-13T10:40:17Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a1e2df13
- Parents:
- e5e73af
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/udp/sock.c
re5e73af r141a20d 531 531 int rc; 532 532 533 log_msg(LVL_DEBUG, " tcp_sock_close()");533 log_msg(LVL_DEBUG, "udp_sock_close()"); 534 534 socket_id = SOCKET_GET_SOCKET_ID(call); 535 535 … … 543 543 fibril_mutex_lock(&socket->lock); 544 544 545 fibril_mutex_lock(&socket->recv_buffer_lock); 546 log_msg(LVL_DEBUG, "udp_sock_close - set socket->sock_core = NULL"); 547 socket->sock_core = NULL; 548 fibril_mutex_unlock(&socket->recv_buffer_lock); 549 550 udp_uc_reset(socket->assoc); 551 545 552 rc = socket_destroy(NULL, socket_id, &client->sockets, &gsock, 546 553 udp_free_sock_data); 547 554 if (rc != EOK) { 555 log_msg(LVL_DEBUG, "udp_sock_close - socket_destroy failed"); 548 556 fibril_mutex_unlock(&socket->lock); 549 557 async_answer_0(callid, rc); 550 558 return; 551 559 } 560 561 log_msg(LVL_DEBUG, "udp_sock_close - broadcast recv_buffer_cv"); 562 fibril_condvar_broadcast(&socket->recv_buffer_cv); 552 563 553 564 fibril_mutex_unlock(&socket->lock); … … 576 587 log_msg(LVL_DEBUG, "udp_sock_recv_fibril()"); 577 588 589 fibril_mutex_lock(&sock->recv_buffer_lock); 590 578 591 while (true) { 579 592 log_msg(LVL_DEBUG, "[] wait for rcv buffer empty()"); 580 fibril_mutex_lock(&sock->recv_buffer_lock); 581 while (sock->recv_buffer_used != 0) { 593 while (sock->recv_buffer_used != 0 && sock->sock_core != NULL) { 582 594 fibril_condvar_wait(&sock->recv_buffer_cv, 583 595 &sock->recv_buffer_lock); … … 589 601 sock->recv_error = urc; 590 602 591 udp_sock_notify_data(sock->sock_core); 603 log_msg(LVL_DEBUG, "[] udp_uc_receive -> %d", urc); 604 605 if (sock->sock_core != NULL) 606 udp_sock_notify_data(sock->sock_core); 592 607 593 608 if (urc != UDP_EOK) { 609 log_msg(LVL_DEBUG, "[] urc != UDP_EOK, break"); 594 610 fibril_condvar_broadcast(&sock->recv_buffer_cv); 595 fibril_mutex_unlock(&sock->recv_buffer_lock);596 611 break; 597 612 } … … 600 615 601 616 sock->recv_buffer_used = rcvd; 602 fibril_mutex_unlock(&sock->recv_buffer_lock);603 617 fibril_condvar_broadcast(&sock->recv_buffer_cv); 604 618 } 605 619 620 log_msg(LVL_DEBUG, "udp_sock_recv_fibril() exited loop"); 621 fibril_mutex_unlock(&sock->recv_buffer_lock); 606 622 udp_uc_destroy(sock->assoc); 623 624 log_msg(LVL_DEBUG, "udp_sock_recv_fibril() terminated"); 607 625 608 626 return 0;
Note:
See TracChangeset
for help on using the changeset viewer.