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
This commit is contained in:
Jérôme Duval 2007-09-19 22:07:13 +00:00
parent 595998812e
commit d46597c7f2
1 changed files with 10 additions and 3 deletions

View File

@ -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]);
}