diff --git a/api.c b/api.c index 7b7019f2..d8522ea3 100644 --- a/api.c +++ b/api.c @@ -3682,6 +3682,7 @@ void api(int api_thr_id) if (!opt_api_listen) { applog(LOG_DEBUG, "API not running%s", UNAVAILABLE); + free(apisock); return; } @@ -3699,6 +3700,7 @@ void api(int api_thr_id) if (ips == 0) { applog(LOG_WARNING, "API not running (no valid IPs specified)%s", UNAVAILABLE); + free(apisock); return; } } @@ -3710,6 +3712,7 @@ void api(int api_thr_id) *apisock = socket(AF_INET, SOCK_STREAM, 0); if (*apisock == INVSOCK) { applog(LOG_ERR, "API1 initialisation failed (%s)%s", SOCKERRMSG, UNAVAILABLE); + free(apisock); return; } @@ -3721,6 +3724,7 @@ void api(int api_thr_id) serv.sin_addr.s_addr = inet_addr(localaddr); if (serv.sin_addr.s_addr == (in_addr_t)INVINETADDR) { applog(LOG_ERR, "API2 initialisation failed (%s)%s", SOCKERRMSG, UNAVAILABLE); + free(apisock); return; } } @@ -3759,12 +3763,14 @@ void api(int api_thr_id) if (bound == 0) { applog(LOG_ERR, "API bind to port %d failed (%s)%s", port, binderror, UNAVAILABLE); + free(apisock); return; } if (SOCKETFAIL(listen(*apisock, QUEUE))) { applog(LOG_ERR, "API3 initialisation failed (%s)%s", SOCKERRMSG, UNAVAILABLE); CLOSESOCKET(*apisock); + free(apisock); return; } @@ -3901,6 +3907,8 @@ die: ; pthread_cleanup_pop(true); + free(apisock); + if (opt_debug) applog(LOG_DEBUG, "API: terminating due to: %s", do_a_quit ? "QUIT" : (do_a_restart ? "RESTART" : (bye ? "BYE" : "UNKNOWN!")));