components/freertos: override per-task __cleanup handler to close stdin, stdout, stderr

Default _cleanup_r doesn't do that, which leaks these three file descriptors.
This commit is contained in:
Ivan Grokhotkov
2016-09-19 19:28:36 +08:00
parent b1ac144874
commit e8ae38024d
2 changed files with 22 additions and 0 deletions

View File

@@ -85,6 +85,7 @@ task.h is included from an application file. */
#include "StackMacros.h"
#include "portmacro.h"
#include "semphr.h"
#include "sys/reent.h"
/* Lint e961 and e750 are suppressed as a MISRA exception justified because the
MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined for the
@@ -3489,6 +3490,9 @@ TCB_t *pxNewTCB;
#if ( INCLUDE_vTaskDelete == 1 )
// TODO: move this to newlib component and provide a header file
extern void _extra_cleanup_r(struct _reent* r);
static void prvDeleteTCB( TCB_t *pxTCB )
{
/* This call is required specifically for the TriCore port. It must be
@@ -3500,6 +3504,7 @@ TCB_t *pxNewTCB;
to the task to free any memory allocated at the application level. */
#if ( configUSE_NEWLIB_REENTRANT == 1 )
{
pxTCB->xNewLib_reent.__cleanup = &_extra_cleanup_r;
_reclaim_reent( &( pxTCB->xNewLib_reent ) );
}
#endif /* configUSE_NEWLIB_REENTRANT */