libftdi Archives

Subject: 1.0/src/ftdi.c: Don't leak ctx, was: Re: memory leak in examples/find_all.c (1.0)

From: Uwe Bonnes <bon@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
To: libftdi@xxxxxxxxxxxxxxxxxxxxxxx
Date: Tue, 21 Jun 2011 14:24:58 +0200
>>>>> "Xiaofan" == Xiaofan Chen <xiaofanc@xxxxxxxxx> writes:

    Xiaofan> On Mon, Jun 20, 2011 at 11:25 PM, Uwe Bonnes
    Xiaofan> <bon@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
    >> I guess the memory leak happens inside our versions of libusb.  On my
    >> system (Opensuse 11.4) with libusb-1_0-0-1.0.8-4.1.x86_64 and e.g.
    >>  baudtest I still get:
    >> 

    Xiaofan> What if you try the latest libusb-stuge.git which is currently
    Xiaofan> the development branch for libusb?
    Xiaofan> http://git.libusb.org/?p=libusb-stuge.git;a=summary;js=1

We called libusb_init() several times in our code and so leak the the USB
context. So these leak were with libftdi.
-- 
Uwe Bonnes                bon@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Institut fuer Kernphysik  Schlossgartenstrasse 9  64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
>From 43c552b99e95cd8afd9e51acb685cc495524429f Mon Sep 17 00:00:00 2001
From: Uwe Bonnes <bon@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 21 Jun 2011 14:18:13 +0200
Subject: Only ftdi_init may call libusb_init, or we leak an USB Context

---
 src/ftdi.c |    8 --------
 1 files changed, 0 insertions(+), 8 deletions(-)

diff --git a/src/ftdi.c b/src/ftdi.c
index 3301844..d5c4fbd 100644
--- a/src/ftdi.c
+++ b/src/ftdi.c
@@ -607,7 +607,6 @@ int ftdi_usb_open(struct ftdi_context *ftdi, int vendor, 
int product)
     \retval -7: set baudrate failed
     \retval -8: get product description failed
     \retval -9: get serial number failed
-    \retval -11: libusb_init() failed
     \retval -12: libusb_get_device_list() failed
     \retval -13: libusb_get_device_descriptor() failed
 */
@@ -652,9 +651,6 @@ int ftdi_usb_open_desc_index(struct ftdi_context *ftdi, int 
vendor, int product,
     if (ftdi == NULL)
         ftdi_error_return(-11, "ftdi context invalid");
 
-    if (libusb_init(&ftdi->usb_ctx) < 0)
-        ftdi_error_return(-11, "libusb_init() failed");
-
     if (libusb_get_device_list(ftdi->usb_ctx, &devs) < 0)
         ftdi_error_return(-12, "libusb_get_device_list() failed");
 
@@ -730,7 +726,6 @@ int ftdi_usb_open_desc_index(struct ftdi_context *ftdi, int 
vendor, int product,
     \note The description format may be extended in later versions.
 
     \retval  0: all fine
-    \retval -1: libusb_init() failed
     \retval -2: libusb_get_device_list() failed
     \retval -3: usb device not found
     \retval -4: unable to open device
@@ -758,9 +753,6 @@ int ftdi_usb_open_string(struct ftdi_context *ftdi, const 
char* description)
         unsigned int bus_number, device_address;
         int i = 0;
 
-        if (libusb_init (&ftdi->usb_ctx) < 0)
-            ftdi_error_return(-1, "libusb_init() failed");
-
         if (libusb_get_device_list(ftdi->usb_ctx, &devs) < 0)
             ftdi_error_return(-2, "libusb_get_device_list() failed");
 
-- 
1.7.3.4


--
libftdi - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to libftdi+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx

Current Thread