From 9591761134f927f9b045d6f591b3841692810acf Mon Sep 17 00:00:00 2001 From: beveloper Date: Tue, 1 Jun 2004 20:58:57 +0000 Subject: [PATCH] removed memory leaking when out of memory. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7733 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/drivers/network/ipro1000/driver.c | 11 +++++++++-- src/add-ons/kernel/drivers/network/rtl8169/driver.c | 11 +++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/add-ons/kernel/drivers/network/ipro1000/driver.c b/src/add-ons/kernel/drivers/network/ipro1000/driver.c index 483178bf11..068365d916 100644 --- a/src/add-ons/kernel/drivers/network/ipro1000/driver.c +++ b/src/add-ons/kernel/drivers/network/ipro1000/driver.c @@ -123,8 +123,10 @@ init_driver(void) if (!item) return B_NO_MEMORY; - if (get_module(B_PCI_MODULE_NAME, (module_info **)&gPci) < B_OK) + if (get_module(B_PCI_MODULE_NAME, (module_info **)&gPci) < B_OK) { + free(item); return B_ERROR; + } for (cards = 0, index = 0; gPci->get_nth_pci_info(index++, item) == B_OK; ) { const char *info = identify_device(item); @@ -138,7 +140,7 @@ init_driver(void) cards++; item = (pci_info *)malloc(sizeof(pci_info)); if (!item) - return B_OK; // already found 1 card, but out of memory + goto err_outofmem; if (cards == MAX_CARDS) break; } @@ -167,6 +169,11 @@ err_mempool: terminate_timer(); err_timer: err_cards: +err_outofmem: + for (index = 0; index < cards; index++) { + free(gDevList[index]); + free(gDevNameList[index]); + } put_module(B_PCI_MODULE_NAME); return B_ERROR; } diff --git a/src/add-ons/kernel/drivers/network/rtl8169/driver.c b/src/add-ons/kernel/drivers/network/rtl8169/driver.c index 78218799d1..cc5d25b55d 100644 --- a/src/add-ons/kernel/drivers/network/rtl8169/driver.c +++ b/src/add-ons/kernel/drivers/network/rtl8169/driver.c @@ -81,8 +81,10 @@ init_driver(void) if (!item) return B_NO_MEMORY; - if (get_module(B_PCI_MODULE_NAME, (module_info **)&gPci) < B_OK) + if (get_module(B_PCI_MODULE_NAME, (module_info **)&gPci) < B_OK) { + free(item); return B_ERROR; + } for (cards = 0, index = 0; gPci->get_nth_pci_info(index++, item) == B_OK; ) { if (item->vendor_id == 0x10ec && item->device_id == 0x8169) { @@ -94,7 +96,7 @@ init_driver(void) cards++; item = (pci_info *)malloc(sizeof(pci_info)); if (!item) - return B_OK; // already found 1 card, but out of memory + goto err_outofmem; if (cards == MAX_CARDS) break; } @@ -116,6 +118,11 @@ init_driver(void) err_timer: err_cards: +err_outofmem: + for (index = 0; index < cards; index++) { + free(gDevList[index]); + free(gDevNameList[index]); + } put_module(B_PCI_MODULE_NAME); return B_ERROR; }