I¡¯ll answer this myself:
When esl_mutex_t is created in esl_mutex_create(), attribution ¡°PTHREAD_MUTEX_RECERSIVE¡± is set.
This attribution allows mutex is locked for several times without unlock in the same thread.
So there is no dead lock issue for esl_execute()
But I still meet another dead lock between main thread (sending ESL cmd) and ESL event process thread, is there any constrain for esl interface usages in *INBOUND* mode under multi-thread?
>>>>>>>>>
esl_execute()
When I read the implementation of the code, is there any possibility to dead lock as following?
esl_execute()
+-->esl_send_recv /esl_send_recv_timed(_handle, _cmd, 0)
+--> esl_mutex_lock(handle->mutex); <<<<< lock for 1st time
+--> esl_recv_event_timed(handle, ms, 0, &handle ->last_sr_event)
+--> esl_recv_event()
+----> esl_mutex_lock(handle->mutex); <<<<<< lock for 2nd time, but preview one is not unlock