From d46597c7f2943ccd6eb95a72e1617e73e370a770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Wed, 19 Sep 2007 22:07:13 +0000 Subject: [PATCH] correctly release resources on error in init, or on uninit checks if pci module is present git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22262 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/drivers/network/bcm440x/b44um.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/drivers/network/bcm440x/b44um.c b/src/add-ons/kernel/drivers/network/bcm440x/b44um.c index 758ce933cd..7972e75e9f 100644 --- a/src/add-ons/kernel/drivers/network/bcm440x/b44um.c +++ b/src/add-ons/kernel/drivers/network/bcm440x/b44um.c @@ -87,8 +87,8 @@ init_driver(void) int i = 0; pci_info dev_info; - if (pci == NULL) - get_module(B_PCI_MODULE_NAME,(module_info **)&pci); + if (get_module(B_PCI_MODULE_NAME,(module_info **)&pci) < B_OK) + return ENOSYS; while (pci->get_nth_pci_info(i++, &dev_info) == 0) { if (dev_info.class_base != PCI_network @@ -116,8 +116,14 @@ init_driver(void) be_b44_dev_cards[sCardsFound].linkChangeSem = -1; #endif - if (b44_LM_GetAdapterInfo(&be_b44_dev_cards[sCardsFound].lm_dev) != LM_STATUS_SUCCESS) + if (b44_LM_GetAdapterInfo(&be_b44_dev_cards[sCardsFound].lm_dev) != LM_STATUS_SUCCESS) { + for (i = 0; i < sCardsFound; i++) { + free((void *)sDeviceNames[i]); + delete_sem(be_b44_dev_cards[i].packet_release_sem); + } + put_module(B_PCI_MODULE_NAME); return ENODEV; + } QQ_InitQueue(&be_b44_dev_cards[sCardsFound].RxPacketReadQ.Container, MAX_RX_PACKET_DESC_COUNT); @@ -147,6 +153,7 @@ uninit_driver(void) delete_area(pUmDevice->mem_base); + delete_sem(be_b44_dev_cards[j].packet_release_sem); free((void *)sDeviceNames[j]); }