From f4b9215615558e9a627a1f4a13b40e5e85d34378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Mon, 4 Dec 2006 16:54:05 +0000 Subject: [PATCH] Don't hold the socket's lock when calling socket_read_avail() or socket_send_avail(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19423 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/network/stack/net_socket.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/add-ons/kernel/network/stack/net_socket.cpp b/src/add-ons/kernel/network/stack/net_socket.cpp index 27b70c79f0..4ad84bf5ef 100644 --- a/src/add-ons/kernel/network/stack/net_socket.cpp +++ b/src/add-ons/kernel/network/stack/net_socket.cpp @@ -331,10 +331,11 @@ socket_request_notification(net_socket *socket, uint8 event, uint32 ref, status_t status = add_select_sync_pool_entry(&socket->select_pool, sync, ref, event); - if (status < B_OK) { - benaphore_unlock(&socket->lock); + + benaphore_unlock(&socket->lock); + + if (status < B_OK) return status; - } // check if the event is already present // TODO: add support for poll() types @@ -359,7 +360,6 @@ socket_request_notification(net_socket *socket, uint8 event, uint32 ref, break; } - benaphore_unlock(&socket->lock); return B_OK; } @@ -380,8 +380,6 @@ socket_cancel_notification(net_socket *socket, uint8 event, selectsync *sync) status_t socket_notify(net_socket *socket, uint8 event, int32 value) { - benaphore_lock(&socket->lock); - bool notify = true; switch (event) { @@ -402,6 +400,8 @@ socket_notify(net_socket *socket, uint8 event, int32 value) break; } + benaphore_lock(&socket->lock); + if (notify && socket->select_pool) notify_select_event_pool(socket->select_pool, event);