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:
@@ -87,8 +87,8 @@ init_driver(void)
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
pci_info dev_info;
|
pci_info dev_info;
|
||||||
|
|
||||||
if (pci == NULL)
|
if (get_module(B_PCI_MODULE_NAME,(module_info **)&pci) < B_OK)
|
||||||
get_module(B_PCI_MODULE_NAME,(module_info **)&pci);
|
return ENOSYS;
|
||||||
|
|
||||||
while (pci->get_nth_pci_info(i++, &dev_info) == 0) {
|
while (pci->get_nth_pci_info(i++, &dev_info) == 0) {
|
||||||
if (dev_info.class_base != PCI_network
|
if (dev_info.class_base != PCI_network
|
||||||
@@ -116,8 +116,14 @@ init_driver(void)
|
|||||||
be_b44_dev_cards[sCardsFound].linkChangeSem = -1;
|
be_b44_dev_cards[sCardsFound].linkChangeSem = -1;
|
||||||
#endif
|
#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;
|
return ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
QQ_InitQueue(&be_b44_dev_cards[sCardsFound].RxPacketReadQ.Container,
|
QQ_InitQueue(&be_b44_dev_cards[sCardsFound].RxPacketReadQ.Container,
|
||||||
MAX_RX_PACKET_DESC_COUNT);
|
MAX_RX_PACKET_DESC_COUNT);
|
||||||
@@ -147,6 +153,7 @@ uninit_driver(void)
|
|||||||
|
|
||||||
delete_area(pUmDevice->mem_base);
|
delete_area(pUmDevice->mem_base);
|
||||||
|
|
||||||
|
delete_sem(be_b44_dev_cards[j].packet_release_sem);
|
||||||
free((void *)sDeviceNames[j]);
|
free((void *)sDeviceNames[j]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user