Ignore:
File:
1 edited

Legend:

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

    r798105ca r1038a9c  
    151151            sock, sock_id);
    152152
    153         if (rc != EOK) {
    154                 fibril_destroy(sock->recv_fibril);
    155                 sock->recv_fibril = 0;
     153        if (rc != EOK)
    156154                return rc;
    157         }
    158155
    159156        sock_core = socket_cores_find(&sock->client->sockets, *sock_id);
     
    779776        }
    780777
    781         /* Grab recv_buffer_lock because of CV wait in tcp_sock_recv_fibril() */
    782         fibril_mutex_lock(&socket->recv_buffer_lock);
    783         socket->sock_core = NULL;
    784         fibril_mutex_unlock(&socket->recv_buffer_lock);
    785 
    786778        rc = socket_destroy(NULL, socket_id, &client->sockets, &gsock,
    787779            tcp_free_sock_data);
     
    844836        log_msg(LVL_DEBUG, "tcp_sock_recv_fibril()");
    845837
    846         fibril_mutex_lock(&sock->recv_buffer_lock);
    847 
    848838        while (true) {
    849839                log_msg(LVL_DEBUG, "call tcp_uc_receive()");
    850                 while (sock->recv_buffer_used != 0 && sock->sock_core != NULL)
     840                fibril_mutex_lock(&sock->recv_buffer_lock);
     841                while (sock->recv_buffer_used != 0)
    851842                        fibril_condvar_wait(&sock->recv_buffer_cv,
    852843                            &sock->recv_buffer_lock);
     
    858849                        sock->recv_error = trc;
    859850                        fibril_condvar_broadcast(&sock->recv_buffer_cv);
    860                         if (sock->sock_core != NULL)
    861                                 tcp_sock_notify_data(sock->sock_core);
     851                        fibril_mutex_unlock(&sock->recv_buffer_lock);
     852                        tcp_sock_notify_data(sock->sock_core);
    862853                        break;
    863854                }
     
    867858                sock->recv_buffer_used = data_len;
    868859                fibril_condvar_broadcast(&sock->recv_buffer_cv);
    869                 if (sock->sock_core != NULL)
    870                         tcp_sock_notify_data(sock->sock_core);
    871         }
    872 
    873         fibril_mutex_unlock(&sock->recv_buffer_lock);
     860                fibril_mutex_unlock(&sock->recv_buffer_lock);
     861                tcp_sock_notify_data(sock->sock_core);
     862        }
    874863
    875864        tcp_uc_delete(sock->conn);
Note: See TracChangeset for help on using the changeset viewer.