diff --git a/src/redir.c b/src/redir.c index 73921b97..4a5a489f 100644 --- a/src/redir.c +++ b/src/redir.c @@ -1381,5 +1381,9 @@ main(int argc, char **argv) stop_plugin(); } + for (i = 0; i < remote_num; i++) + ss_free(listen_ctx.remote_addr[i]); + ss_free(listen_ctx.remote_addr); + return ret_val; } diff --git a/src/tunnel.c b/src/tunnel.c index 7a345f3e..e0886bdb 100644 --- a/src/tunnel.c +++ b/src/tunnel.c @@ -1427,6 +1427,10 @@ main(int argc, char **argv) stop_plugin(); } + for (i = 0; i < remote_num; i++) + ss_free(listen_ctx.remote_addr[i]); + ss_free(listen_ctx.remote_addr); + #ifdef __MINGW32__ if (plugin_watcher.valid) { closesocket(plugin_watcher.fd); diff --git a/src/udprelay.c b/src/udprelay.c index e9d7db04..9c46f142 100644 --- a/src/udprelay.c +++ b/src/udprelay.c @@ -1467,6 +1467,9 @@ free_udprelay() ev_io_stop(loop, &server_ctx->io); close(server_ctx->fd); cache_delete(server_ctx->conn_cache, 0); +#ifdef MODULE_LOCAL + free((char*) server_ctx->remote_addr); +#endif ss_free(server_ctx); server_ctx_list[server_num] = NULL; }