From 42605e58c30293e8bd44d717226abc8a9b18c9ac Mon Sep 17 00:00:00 2001 From: Waldemar Kornewald Date: Wed, 29 Sep 2004 07:32:12 +0000 Subject: [PATCH] Changed to choose select() emulation on a per-request basis. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9097 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/drivers/network/stack/net_stack_driver.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/add-ons/kernel/drivers/network/stack/net_stack_driver.c b/src/add-ons/kernel/drivers/network/stack/net_stack_driver.c index b1281d7a29..c7218cb1a8 100644 --- a/src/add-ons/kernel/drivers/network/stack/net_stack_driver.c +++ b/src/add-ons/kernel/drivers/network/stack/net_stack_driver.c @@ -70,6 +70,7 @@ typedef struct selecter { uint32 event; selectsync * sync; uint32 ref; + notify_select_event_function notify; } selecter; // the cookie we attach to each file descriptor opened on our driver entry @@ -581,6 +582,8 @@ static status_t net_stack_select(void *cookie, uint8 event, uint32 ref, selectsy s->event = event; s->sync = sync; s->ref = ref; + s->notify = nsc->notify; + nsc->notify = NULL; // lock the selecters list status = acquire_sem(nsc->selecters_lock); @@ -645,9 +648,6 @@ static status_t net_stack_deselect(void *cookie, uint8 event, selectsync *sync) free(s); }; - nsc->notify = NULL; - // unset notification function - if (nsc->selecters == NULL) // selecters list is empty: no need to monitor socket events anymore core->socket_set_event_callback(nsc->socket, NULL, NULL, event); @@ -685,7 +685,7 @@ static void on_socket_event(void * socket, uint32 event, void * cookie) s = nsc->selecters; while (s) { if (s->event == event) - nsc->notify(s->sync, s->ref); + s->notify(s->sync, s->ref); // notify this selecter (thread/event pair) s = s->next; };