diff options
author | Ladar Levison <ladar@lavabit.com> | 2018-11-09 10:16:25 +0300 |
---|---|---|
committer | Ladar Levison <ladar@lavabit.com> | 2018-11-09 10:16:25 +0300 |
commit | 7202af06a08e7aa7ba80be4f54851391f9627b1e (patch) | |
tree | 3902b26b2af2d1f27a9465764e3b81ce60cc00a0 /src | |
parent | 2ba7589c289a5097d4a13598f635094251aae379 (diff) |
Fixed descriptor leak during shutdowns.
Diffstat (limited to 'src')
-rw-r--r-- | src/core/memory/memory.c | 1 | ||||
-rw-r--r-- | src/network/listeners.c | 7 |
2 files changed, 6 insertions, 2 deletions
diff --git a/src/core/memory/memory.c b/src/core/memory/memory.c index e3d7e670..6476916d 100644 --- a/src/core/memory/memory.c +++ b/src/core/memory/memory.c @@ -26,6 +26,7 @@ void mm_cleanup_variadic(ssize_t len, ...) { block = va_arg(list, void *); if (block) mm_free(block); } + va_end(list); return; diff --git a/src/network/listeners.c b/src/network/listeners.c index 6a9c4b15..f47b8e0a 100644 --- a/src/network/listeners.c +++ b/src/network/listeners.c @@ -16,9 +16,12 @@ void net_accept(server_t *server) { do { // Keep calling accept until it fails. - if ((connection = accept(server->network.sockd, NULL, NULL)) != -1) { + if ((connection = accept(server->network.sockd, NULL, NULL)) != -1 && status()) { protocol_process(server, connection); } + else if (connection != -1) { + close(connection); + } } while(status()); @@ -137,7 +140,7 @@ void net_trigger(bool_t verbose) { // Wakeup the listening threads. for (uint64_t i = 0; i < MAGMA_SERVER_INSTANCES; i++) { if ((server = magma.servers[i]) && server->enabled && server->network.sockd > 0) { - client_connect("localhost", server->network.port); + client = client_connect("localhost", server->network.port); client_close(client); shutdown(server->network.sockd, SHUT_RDWR); } |