Strange behavior: semaphore deletes itself

Standard answer to questions describing weird application behavior :wink:
Did you define configASSERT and also enable stack overflow checking for development/debugging to catch possible fatal errors or data corruption ?
Another issue might be wrong interrupt priorities for interrupts using FreeRTOS API in their corresponding ISRs resp. ISR callbacks.
See e.g. Understanding priority levels of ISR and FreeRTOS APIs - #16 by aggarg for a pretty good explanation.