From ea78f4d0e825152a175d4cfead7a2c7e02adb26a Mon Sep 17 00:00:00 2001
From: Tamas Cseke <tamas.cseke@virtual-call-center.eu>
Date: Mon, 19 May 2014 14:47:39 +0200
Subject: [PATCH] Fix race in erlang process spawning

We received the reply and signaled the condition
earlier then started to wait for it
---
 src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c b/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c
index 5f5295dccb..b1743eb716 100644
--- a/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c
+++ b/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c
@@ -1466,6 +1466,8 @@ session_elem_t *attach_call_to_spawned_process(listener_t *listener, char *modul
 	add_session_elem_to_listener(listener, session_element);
 
 	switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Added session to listener\n");
+
+	switch_mutex_lock(p->mutex);
 	
 	if (!strcmp(function, "!")) {
 		/* send a message to request a pid */
@@ -1499,7 +1501,6 @@ session_elem_t *attach_call_to_spawned_process(listener_t *listener, char *modul
 
 
 	switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Waiting for reply %s %s\n", hash, session_element->uuid_str);
-	switch_mutex_lock(p->mutex);
 	switch_thread_cond_timedwait(p->ready_or_found, p->mutex, 5000000);
 	switch_mutex_unlock(p->mutex);
 	if (!p->pid) {