From: Angus Gratton Date: Wed, 24 Aug 2016 10:10:52 +0000 (+0800) Subject: FreeRTOS: Add xQueueGetMutexHolder support X-Git-Tag: v0.9~71^2~7 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f5715ac28d12735c4505c6188d25e5ee7e9b6120;p=esp-idf FreeRTOS: Add xQueueGetMutexHolder support Enables it as a config option, but there's no overhead at all if the function is not called anywhere. --- diff --git a/components/freertos/include/freertos/FreeRTOSConfig.h b/components/freertos/include/freertos/FreeRTOSConfig.h index 46abb9a3b8..e95abaa9cc 100644 --- a/components/freertos/include/freertos/FreeRTOSConfig.h +++ b/components/freertos/include/freertos/FreeRTOSConfig.h @@ -222,6 +222,8 @@ #define INCLUDE_vTaskDelay 1 #define INCLUDE_uxTaskGetStackHighWaterMark 1 +#define INCLUDE_xSemaphoreGetMutexHolder 1 + /* The priority at which the tick interrupt runs. This should probably be kept at 1. */ #define configKERNEL_INTERRUPT_PRIORITY 1 diff --git a/components/freertos/queue.c b/components/freertos/queue.c index 92e182a620..248ae7c00a 100644 --- a/components/freertos/queue.c +++ b/components/freertos/queue.c @@ -483,14 +483,15 @@ int8_t *pcAllocatedBuffer; void* xQueueGetMutexHolder( QueueHandle_t xSemaphore ) { - void *pxReturn; + Queue_t * const pxQueue = ( Queue_t * ) xSemaphore; + void *pxReturn; /* This function is called by xSemaphoreGetMutexHolder(), and should not be called directly. Note: This is a good way of determining if the calling task is the mutex holder, but not a good way of determining the identity of the mutex holder, as the holder may change between the following critical section exiting and the function returning. */ - taskENTER_CRITICAL(); + taskENTER_CRITICAL(&pxQueue->mux); { if( ( ( Queue_t * ) xSemaphore )->uxQueueType == queueQUEUE_IS_MUTEX ) { @@ -501,7 +502,7 @@ int8_t *pcAllocatedBuffer; pxReturn = NULL; } } - taskEXIT_CRITICAL(); + taskEXIT_CRITICAL(&pxQueue->mux); return pxReturn; } /*lint !e818 xSemaphore cannot be a pointer to const because it is a typedef. */