I'm using the C ESL events api.
I have one threads that continuously checks for updates using esl_recv_event()
I have another thread that sometimes needs to inject commands, that uses esl_send_recv() on the same handle.
It looks like on occasion, both get stuck and stop receiving events.

Is it possible for two threads to access the handle? maybe I should open two connections to freeswitch esl? or use esl_send_recv_timed()?

stack trace:
#0  0xb6f3f974 in __lll_lock_wait () from /lib/arm-linux-gnueabi/libpthread.so.0
#1  0xb6f39858 in pthread_mutex_lock () from /lib/arm-linux-gnueabi/libpthread.so.0
#2  0x000f2f2c in esl_mutex_lock (mutex=<optimized out>) at src/esl_threadmutex.c:200
#3  0x000efb70 in esl_recv_event (handle=0x11b67c, check_q=0, save_event=0xb6c47da4) at src/esl.c:1262
#4  0x0001ebbc in EslHandler::initThread (this=0x11b670) at eslHandler.cpp:95
#5  0x0001ec88 in EslHandler::entryPoint (eslHandler=0x11b670) at eslHandler.cpp:110
#6  0xb6f36b04 in start_thread () from /lib/arm-linux-gnueabi/libpthread.so.0
#7  0xb6d25a2c in ?? () from /lib/arm-linux-gnueabi/libc.so.6
#8  0xb6d25a2c in ?? () from /lib/arm-linux-gnueabi/libc.so.6
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) thread 1
[Switching to thread 1 (Thread 0xb6c4a000 (LWP 3020))]
#0  0xb6d17c04 in poll () from /lib/arm-linux-gnueabi/libc.so.6
(gdb) info stack
#0  0xb6d17c04 in poll () from /lib/arm-linux-gnueabi/libc.so.6
#1  0x000ef92c in esl_wait_sock (sock=<optimized out>, ms=<optimized out>, flags=<optimized out>) at src/esl.c:929
#2  0x000ef988 in handle_recv (handle=0x11b67c, data=0x11b91c, datalen=65535) at src/esl.c:1230
#3  0x000efc84 in esl_recv_event (handle=0x11b67c, check_q=<optimized out>, save_event=0x12c120) at src/esl.c:1323
#4  0x000f0ba4 in esl_send_recv_timed (ms=0, cmd=<optimized out>, handle=0x11b67c) at src/esl.c:1554
#5  esl_send_recv_timed (handle=0x11b67c, cmd=<optimized out>, ms=0) at src/esl.c:1521
#6  0x0001f2e0 in EslHandler::sendAtCommand (this=0x11b670, atCmd=...) at eslHandler.cpp:204
#7  0x0001f86c in EslHandler::getImsiFromSim (this=0x11b670) at eslHandler.cpp:262
#8  0x0001450c in FsControl::checkMessages (this=0x11b2a0) at fsControl.cpp:435
#9  0x000124cc in FsControl::handleEslCustomEvent (this=0x11b2a0, mapEventReceived=...) at fsControl.cpp:376
#10 0x0000f334 in FsControl::handleEslEvent (this=0x11b2a0, mapEventReceived=...) at fsControl.cpp:226
#11 0x0000e7a8 in FsControl::OnWaitHandle (this=0x11b2a0, whp=0x13aea8, data=...) at fsControl.cpp:140
#12 0x000d230c in os::Schedualed::OnEvent (this=0x11b2a0, event=0x13aea8, data=...) at cpp/os.cpp:1578
#13 0x000cd1d0 in os::Schedualer::mainloop (this=0x11b348, exitOnNoneManaged=false) at cpp/os.cpp:446
#14 0x000161e0 in main (argc=3, argv=0xbea16904) at fsControl.cpp:603