From 24a8c5cfe17d9e3f081119ccfc0b82b0e1e220f8 Mon Sep 17 00:00:00 2001 From: beveloper Date: Wed, 30 Oct 2002 14:06:52 +0000 Subject: [PATCH] fix for two bugs git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1788 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../drivers/network/stack/net_server_driver.c | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/add-ons/kernel/drivers/network/stack/net_server_driver.c b/src/add-ons/kernel/drivers/network/stack/net_server_driver.c index 2f23e0f303..3f41dd3556 100644 --- a/src/add-ons/kernel/drivers/network/stack/net_server_driver.c +++ b/src/add-ons/kernel/drivers/network/stack/net_server_driver.c @@ -83,7 +83,7 @@ typedef void (*notify_select_event_function)(selectsync * sync, uint32 ref); typedef struct selecter { struct selecter * next; thread_id thread; - int event; + uint32 event; selectsync * sync; uint32 ref; } selecter; @@ -779,7 +779,7 @@ init_connection(void **cookie) if (nsc->local_port < B_OK) { FATAL(("open: couldn't create port: %s\n", strerror(nsc->local_port))); free(cookie); - return bytes; + return B_ERROR; } set_port_owner(nsc->local_port, B_SYSTEM_TEAM); @@ -820,17 +820,28 @@ init_connection(void **cookie) nsc->area = clone_area("net connection buffer", (void **) &nsc->commands, B_CLONE_ADDRESS, B_READ_AREA | B_WRITE_AREA, connection.area); if (nsc->area < B_OK) { - FATAL(("could clone command queue: %s\n", strerror(nsc->area))); + status_t err; + FATAL(("couldn't clone command queue: %s\n", strerror(nsc->area))); + err = nsc->area; delete_port(nsc->local_port); free(nsc); - return nsc->area; + return err; } nsc->nb_commands = connection.numCommands; nsc->command_index = 0; + nsc->selecters = NULL; nsc->selecters_lock = create_sem(1, "socket_selecters_lock"); - nsc->selecters = NULL; + if (nsc->selecters_lock < B_OK) { + status_t err; + FATAL(("couldn't create socket_selecters_lock semaphore: %s\n", strerror(nsc->selecters_lock))); + err = nsc->selecters_lock; + delete_port(nsc->local_port); + delete_area(nsc->area); + free(nsc); + return err; + } *cookie = nsc; return B_OK;