From: Nathan Neulinger Date: Thu, 23 May 2013 13:13:44 +0000 (-0500) Subject: FS-5431: --resolve fix socket creation loop for mod_skinny to avoid segfault X-Git-Tag: v1.2.13~281 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=123d0865fb12d1caaaca4bcb9222445abdeac5e9;p=thirdparty%2Ffreeswitch.git FS-5431: --resolve fix socket creation loop for mod_skinny to avoid segfault --- 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");