mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2026-06-29 07:18:49 +02:00
fix: Add MPU wrapper for xTimerDelete API
When using MPU wrappers v2, xTimerDelete needs to be a real function rather than a macro so that the kernel object pool index can be freed after the timer is successfully deleted. Without this, deleting a timer leaks the kernel object pool entry. Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
This commit is contained in:
parent
49cec3e9b2
commit
9ffeb07de4
@ -368,6 +368,8 @@ BaseType_t MPU_xTimerGenericCommandFromISR( TimerHandle_t xTimer,
|
|||||||
const TickType_t xOptionalValue,
|
const TickType_t xOptionalValue,
|
||||||
BaseType_t * const pxHigherPriorityTaskWoken,
|
BaseType_t * const pxHigherPriorityTaskWoken,
|
||||||
const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
|
BaseType_t MPU_xTimerDelete( TimerHandle_t xTimer,
|
||||||
|
TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/* MPU versions of event_group.h API functions. */
|
/* MPU versions of event_group.h API functions. */
|
||||||
EventBits_t MPU_xEventGroupWaitBits( EventGroupHandle_t xEventGroup,
|
EventBits_t MPU_xEventGroupWaitBits( EventGroupHandle_t xEventGroup,
|
||||||
|
|||||||
@ -190,6 +190,7 @@
|
|||||||
#define xTimerCreateStatic MPU_xTimerCreateStatic
|
#define xTimerCreateStatic MPU_xTimerCreateStatic
|
||||||
#define xTimerGetStaticBuffer MPU_xTimerGetStaticBuffer
|
#define xTimerGetStaticBuffer MPU_xTimerGetStaticBuffer
|
||||||
#define xTimerGenericCommandFromISR MPU_xTimerGenericCommandFromISR
|
#define xTimerGenericCommandFromISR MPU_xTimerGenericCommandFromISR
|
||||||
|
#define xTimerDelete MPU_xTimerDelete
|
||||||
#endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */
|
#endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */
|
||||||
|
|
||||||
/* Map standard event_group.h API functions to the MPU equivalents. */
|
/* Map standard event_group.h API functions to the MPU equivalents. */
|
||||||
|
|||||||
@ -667,8 +667,13 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION;
|
|||||||
*
|
*
|
||||||
* See the xTimerChangePeriod() API function example usage scenario.
|
* See the xTimerChangePeriod() API function example usage scenario.
|
||||||
*/
|
*/
|
||||||
#define xTimerDelete( xTimer, xTicksToWait ) \
|
#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )
|
||||||
|
BaseType_t xTimerDelete( TimerHandle_t xTimer,
|
||||||
|
TickType_t xTicksToWait );
|
||||||
|
#else
|
||||||
|
#define xTimerDelete( xTimer, xTicksToWait ) \
|
||||||
xTimerGenericCommand( ( xTimer ), tmrCOMMAND_DELETE, 0U, NULL, ( xTicksToWait ) )
|
xTimerGenericCommand( ( xTimer ), tmrCOMMAND_DELETE, 0U, NULL, ( xTicksToWait ) )
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait );
|
* BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait );
|
||||||
|
|||||||
@ -3890,6 +3890,40 @@
|
|||||||
#endif /* if ( configUSE_TIMERS == 1 ) */
|
#endif /* if ( configUSE_TIMERS == 1 ) */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
#if ( configUSE_TIMERS == 1 )
|
||||||
|
|
||||||
|
BaseType_t MPU_xTimerDelete( TimerHandle_t xTimer, TickType_t xTicksToWait ) /* PRIVILEGED_FUNCTION */
|
||||||
|
{
|
||||||
|
BaseType_t xReturn = pdFALSE;
|
||||||
|
TimerHandle_t xInternalTimerHandle = NULL;
|
||||||
|
int32_t lIndex;
|
||||||
|
|
||||||
|
lIndex = ( int32_t ) xTimer;
|
||||||
|
|
||||||
|
if( IS_EXTERNAL_INDEX_VALID( lIndex ) != pdFALSE )
|
||||||
|
{
|
||||||
|
xInternalTimerHandle = MPU_GetTimerHandleAtIndex( CONVERT_TO_INTERNAL_INDEX( lIndex ) );
|
||||||
|
|
||||||
|
if( xInternalTimerHandle != NULL )
|
||||||
|
{
|
||||||
|
xReturn = xTimerGenericCommandFromTask( xInternalTimerHandle,
|
||||||
|
tmrCOMMAND_DELETE,
|
||||||
|
0U, /* xOptionalValue */
|
||||||
|
NULL, /* pxHigherPriorityTaskWoken */
|
||||||
|
xTicksToWait );
|
||||||
|
if( xReturn != pdFALSE )
|
||||||
|
{
|
||||||
|
MPU_SetIndexFreeInKernelObjectPool( CONVERT_TO_INTERNAL_INDEX( lIndex ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return xReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* if ( configUSE_TIMERS == 1 ) */
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
/* MPU wrappers for event group APIs. */
|
/* MPU wrappers for event group APIs. */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user