]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fix possible socket connection race
authorAnthony Minessale <anthm@freeswitch.org>
Thu, 13 May 2010 15:03:49 +0000 (10:03 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Thu, 13 May 2010 19:49:36 +0000 (14:49 -0500)
src/mod/event_handlers/mod_event_socket/mod_event_socket.c

index 6075b9a7d1ee878af094a381df4c8fe4be797fb7..5a2110d3457856f9e2095d1c1bc3373065e678e3 100644 (file)
@@ -2701,11 +2701,19 @@ SWITCH_MODULE_RUNTIME_FUNCTION(mod_event_socket_runtime)
                switch_mutex_init(&listener->filter_mutex, SWITCH_MUTEX_NESTED, listener->pool);
 
                switch_core_hash_init(&listener->event_hash, listener->pool);
-               switch_socket_addr_get(&listener->sa, SWITCH_TRUE, listener->sock);
-               switch_get_addr(listener->remote_ip, sizeof(listener->remote_ip), listener->sa);
-               listener->remote_port = switch_sockaddr_get_port(listener->sa);
-               launch_listener_thread(listener);
 
+               if (switch_socket_addr_get(&listener->sa, SWITCH_TRUE, listener->sock) == SWITCH_STATUS_SUCCESS && listener->sa) {
+                       switch_get_addr(listener->remote_ip, sizeof(listener->remote_ip), listener->sa);
+                       if (listener->sa && (listener->remote_port = switch_sockaddr_get_port(listener->sa))) {
+                               launch_listener_thread(listener);
+                               continue;
+                       } 
+               }
+               
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error initilizing connection\n");
+               close_socket(&listener->sock);
+               expire_listener(&listener);
+       
        }
 
   end: