FreeRTOS + FAT 312 bytes leakage

adriendc wrote on Tuesday, July 09, 2019:

Hello,

I working with FreeRTOS + FAT and i’ve got an intersting heap leakage on the function ff_chdir().

In fact when i’m using this function a MALLOC of the structure size (WorkingDirectory_t = 312 Bytes ) is used to reserve place for the current working directory. Until here every thing is alright, i can even call the function several times and the current working directory will be recognized. The problem happen when i kill the task that was using storage functions and recreate it, i can see that the heap wasn’t freed and it MALLOC again 312 bytes for the same structure.
I also figured out that the pointer to the structure was set to zero after having killed the task but the heap wasn’t freed.

I hope i was clear on the problem.

I’m maybe missing something like a function to free all memories allocated by FAT while i am killing the task ?

Best regards
Thank you.

heinbali01 wrote on Tuesday, July 09, 2019:

Adrien, that is a known issue.

I wrote the following function which should be called by the task before it finishes:

#if( ffconfigHAS_CWD == 1 )

	int ff_free_CWD_space( void )
	{
	WorkingDirectory_t *pxSpace;

		/* Obtain the CWD used by the current task. */
		pxSpace = ( WorkingDirectory_t * ) pvTaskGetThreadLocalStoragePointer( NULL, stdioCWD_THREAD_LOCAL_OFFSET );
		if( pxSpace != NULL )
		{
			vTaskSetThreadLocalStoragePointer( NULL, stdioCWD_THREAD_LOCAL_OFFSET, ( void * ) NULL );
			ffconfigFREE( pxSpace );
		}
		return 0;
	}

#endif /* ffconfigHAS_CWD */
/*-----------------------------------------------------------*/

It will be included in the next release.

adriendc wrote on Monday, July 15, 2019:

Thank you for you answer, it’s now working perfectly.
best regards.
Adrien

adriendc wrote on Monday, July 15, 2019:

Thank you for you answer, it’s now working perfectly.
best regards.
Adrien

adriendc wrote on Monday, July 15, 2019:

Thank you for you answer, it’s now working perfectly.
best regards.
Adrien