Hello Drasko,

The end goal it's to have a safe state of the used JTAG adapter at the end of the executable file.

With this patch => Fix: Correctly exit function: ft2232_init when an error occurred I wish correct the status at the end of ft2232_init function when an error occured. At this moment, in function: ft2232_init the JTAG handle is acquire with the funtion: ft2232_init_ftd2xx or ft2232_init_libftdi and 131072 bytes are allocate for the variable: ft2232_buffer. But when an error occured, the JTAG handle isn't free and all allocate bytes aren't free.

To correct this on the layer ft2232, it's better to clarify the function: ft2232_init.
 And for the end goal, I follow that as speack Laurent:

 Open
    Init
Deinit
 Close

 Open it's to acquire the JTAG handle.
 Init it's to set all parameters and the pinning of the JTAG adapter.
 Deinit it's to be on a safe state with the JTAG adapter.
 Close it's to free the JTAG handle.


With this first patch, I have only divided functions and add the part to close handle and free the bytes of the variable: ft2232_buffer when an error occured.


So I have take the first part of the function: ft2232_init_ftd2xx and put to the function: ft2232_open_ftd2xx (from line: 2118 to line: 2230)
 And I have remove the unnecessary variables.

The second part of the function: ft2232_init_ftd2xx stay on this function (from line: 2231 to line: 2278)
 I have add the necessary variables.


 It's the same work with the function: ft2232_init_libftdi.
So I have take the first part of the function: ft2232_init_libftdi and put to the function: ft2232_open_libftdi (from line: 2296 to line: 2332)
 And I have remove the unnecessary variables.

The second part of the function: ft2232_init_libftdi stay on this function (from line: 2333 to line: 2366)
 I have add the necessary variables.


To not make a lot of change on the function: ft2232_init, I have only divide the function on two parts and add the part to close handle and free the bytes of the variable: ft2232_buffer when an error occured. So the first part of the function: ft2232_init stay on this function (from line: 2421 to line: 2466)
 I have remove the unnecessary variables.
I have change the functions: ft2232_init_ftd2xx and ft2232_init_libftdi by the functions: ft2232_open_ftd2xx and ft2232_open_libftdi (because it's the first part of the functions: ft2232_init_ftd2xx and ft2232_init_libftdi)

I have take the second part of the function: ft2232_init and put to the function: ft2232_init_sub (from line: 2467 to line: 2508)
 I have add the necessary variables.
I have add the call of functions: ft2232_init_ftd2xx and ft2232_init_libftdi (because it's the second part of these functions)

And to identify the case of an error occured before the JTAG handle be acquire, I have add:
        if (retval != ERROR_OK)
                return retval;
(Because if an error occured during the acquire of the JTAG handle, I think that the JTAG handle stay free.)

To correctly free the JTAG handle and free the bytes of the variable: ft2232_buffer when an error occured. I have add:
        retval = ft2232_init_sub();
        if (retval != ERROR_OK)
        {
 #if BUILD_FT2232_FTD2XX == 1
                FT_Close(ftdih);
 #elif BUILD_FT2232_LIBFTDI == 1
                ftdi_usb_close(&ftdic);
                ftdi_deinit(&ftdic);
 #endif
if(ft2232_buffer)
                        free(ft2232_buffer);
                ft2232_buffer = NULL;
return retval;
        }
(That is the content of the function: ft2232_quit (from line: 3231 to line: 3242)) The little modification of the free for the variable: ft2232_buffer, it's to only free the memory when is necessary (and possible).



--
 Regards,
 Sébastien Farquet
   http://www.amontec.com/
   Amontec JTAGkey-2 : High speed USB JTAG interface
3 weeks, no comment.

Please merge the Sebastien'patch.

Regards,
Laurent
  http://www.amontec.com/
  Amontec JTAGkey-2 : High speed USB JTAG interface
  http://www.amontec.com/jtagkey.shtml <http://www.amontec.com/>


_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to