Style question regarding xSemaphoreTake

jcwren wrote on Wednesday, August 20, 2008:

If one uses xSemaphoreTake with portMAX_DELAY, is it worth checking the return result, assuming we know the semaphore handle to be valid?  The question, of course, is what the appropriate course of action is should it fail.  With a valid handle and portMAX_DELAY, is it realistically possible for the take to fail?

davedoors wrote on Wednesday, August 20, 2008:

Now that depends :slight_smile:

If you have INCLUDE_vTaskSuspend defined as 1 then the function will only return it has taken the semaphore and you need not check the return value.

If you have INCLUDE_vTaskSuspend defined as 0 then the call cannot block for ever and will return when portMAX_DELAY ticks has expire and you must check the return value although if you have ticks defined to be a 32bit type this can be days/months/years depending on the tick frequency.

In the latter case the stype is

//Wait on semaphore.
while( xSemaphoreTake( semaphore, portMAX_DELAY ) != 1 );

//We now have the semaphore.

jcwren wrote on Wednesday, August 20, 2008:

Glad you mentioned the INCLUDE_vTaskSuspend.  I am using that, and had noticed that in the docs, but failed to mention it in my scenario.  There didn’t seem to be a failure case (other than passing an invalid semaphore), so I thought a call with no error checking should be stylistically OK (unless a stray alpha particle flips a bit in your semaphore handle…)