From 123d0865fb12d1caaaca4bcb9222445abdeac5e9 Mon Sep 17 00:00:00 2001 From: Nathan Neulinger Date: Thu, 23 May 2013 08:13:44 -0500 Subject: [PATCH] FS-5431: --resolve fix socket creation loop for mod_skinny to avoid segfault --- src/mod/endpoints/mod_skinny/mod_skinny.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/mod/endpoints/mod_skinny/mod_skinny.c b/src/mod/endpoints/mod_skinny/mod_skinny.c index 792895a3e4..3a590e4433 100644 --- a/src/mod/endpoints/mod_skinny/mod_skinny.c +++ b/src/mod/endpoints/mod_skinny/mod_skinny.c @@ -1543,7 +1543,7 @@ static void *SWITCH_THREAD_FUNC skinny_profile_run(switch_thread_t *thread, void } new_socket: - while(globals.running) { + while(globals.running && !profile->sock) { char *listening_ip = NULL; switch_clear_flag_locked(profile, PFLAG_RESPAWN); rv = switch_sockaddr_info_get(&sa, profile->ip, SWITCH_UNSPEC, profile->port, 0, tmp_pool); @@ -1570,6 +1570,10 @@ new_socket: break; sock_fail: switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Socket Error! Could not listen on %s:%u\n", profile->ip, profile->port); + if (profile->sock) { + close_socket(&profile->sock, profile); + profile->sock = NULL; + } switch_yield(100000); } @@ -1582,6 +1586,8 @@ sock_fail: goto fail; } + assert(profile->sock); + if ((rv = switch_socket_accept(&inbound_socket, profile->sock, listener_pool))) { if (!globals.running) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Shutting Down\n");