So I looked in the source code and saw that xSemaphoreGetMutexHolder is actually a macro for xQueueGetMutexHolder. And xQueueGetMutexHolder returns “void *” although it’s prefix (x) should mean something else.
I’m not entirely sure what does x-prefix mean but every other functions that return “void *” are prefixed with “pv”.
After reading API reference I figured out that it actually should return TaskHandle_t (which is a typedef for void *).
Although this is not a bug I’m not sure it’s as it should be.
UPD:
Return type is also missing in API references for xSemaphoreTake, xSemaphoreTakeFromISR, xSemaphoreTakeRecursive, xSemaphoreGive, xSemaphoreGiveRecursive and xSemaphoreGiveFromISR.
Thanks for pointing out the missing return type
in the documentation - it has been corrected.
I suspect the function returns a void* because
inside the queue.c the TaskHandle_t type is not
known - and it can't be relied upon that an
application writer will include task.h before
queue.h. Returning void* is ok as it can be cast
to any type, and in this case TaskHandle_t is itself
a void * - hence I have updated the documentation to
show a TaskHandle_t being returned.
Regards.
[edited to remove formatting as the forum uses the asterisk as a formatting character.]