Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/lavabit/magma.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLadar Levison <ladar@lavabit.com>2018-11-09 10:16:25 +0300
committerLadar Levison <ladar@lavabit.com>2018-11-09 10:16:25 +0300
commit7202af06a08e7aa7ba80be4f54851391f9627b1e (patch)
tree3902b26b2af2d1f27a9465764e3b81ce60cc00a0 /src
parent2ba7589c289a5097d4a13598f635094251aae379 (diff)
Fixed descriptor leak during shutdowns.
Diffstat (limited to 'src')
-rw-r--r--src/core/memory/memory.c1
-rw-r--r--src/network/listeners.c7
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);
}