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