From 7eb1ef96e22c1e351563f51febedb994fe74f196 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 15 Dec 2006 14:05:45 +0000 Subject: [PATCH] The device could only be opened once; gOpenMask was never cleared. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19522 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/drivers/network/etherpci/etherpci.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/drivers/network/etherpci/etherpci.c b/src/add-ons/kernel/drivers/network/etherpci/etherpci.c index f269210328..7d519cdff4 100644 --- a/src/add-ons/kernel/drivers/network/etherpci/etherpci.c +++ b/src/add-ons/kernel/drivers/network/etherpci/etherpci.c @@ -1552,10 +1552,10 @@ err0: static status_t close_hook(void *_data) { - etherpci_private_t *data = (etherpci_private_t *) _data; + etherpci_private_t *data = (etherpci_private_t *)_data; ETHER_DEBUG(FUNCTION, data->debug, kDevName ": close dev=%x\n", data); - /* + /* * Force pending reads and writes to terminate */ io_lock(data); @@ -1613,7 +1613,7 @@ close_hook(void *_data) remove_debugger_command (kDevName, etherpci); #endif - return B_NO_ERROR; + return B_OK; } @@ -1621,11 +1621,18 @@ static status_t free_hook(void *_data) { etherpci_private_t *data = (etherpci_private_t *)_data; + int32 mask; + ETHER_DEBUG(FUNCTION, data->debug, kDevName ": free %s dev=%x\n", data); #if !__INTEL__ delete_area(data->ioarea); #endif + + // make sure the device can be reopened again + mask = 1L << data->devID; + atomic_and(&gOpenMask, ~mask); + free(data); return B_OK; }