From f1f1806fcff4d2245478f6ac42c85fbf2d12bb94 Mon Sep 17 00:00:00 2001 From: Dan Staples Date: Wed, 10 Sep 2014 12:43:24 -0400 Subject: [PATCH] removed old ob_free fix that was causing segfaults; added other memory leak fixes --- overlay_interface.c | 3 ++- overlay_mdp.c | 4 +++- route_link.c | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/overlay_interface.c b/overlay_interface.c index 6e906e5d..ee2a18c7 100644 --- a/overlay_interface.c +++ b/overlay_interface.c @@ -60,7 +60,8 @@ overlay_interface_close(overlay_interface *interface){ if (interface->address.addr.sa_family == AF_UNIX) unlink(interface->address.local.sun_path); link_interface_down(interface); - unschedule(&interface->alarm); + if (is_scheduled(&interface->alarm)) + unschedule(&interface->alarm); if (is_watching(&interface->alarm)) unwatch(&interface->alarm); close(interface->alarm.poll.fd); diff --git a/overlay_mdp.c b/overlay_mdp.c index 0d2b2020..8c5af6ba 100644 --- a/overlay_mdp.c +++ b/overlay_mdp.c @@ -907,8 +907,8 @@ int overlay_send_frame(struct internal_mdp_header *header, /* crypted and signed (using CryptoBox authcryption primitive) */ frame->payload = encrypt_payload(frame->source, frame->destination, ob_ptr(plaintext), ob_position(plaintext)); + ob_free(plaintext); if (!frame->payload){ - ob_free(plaintext); op_free(frame); return -1; } @@ -925,6 +925,7 @@ int overlay_send_frame(struct internal_mdp_header *header, || crypto_sign_message(frame->source->identity, ob_ptr(frame->payload), frame->payload->allocSize, &frame->payload->position) == -1 ) { op_free(frame); + ob_free(plaintext); return -1; } #if 0 @@ -949,6 +950,7 @@ int overlay_send_frame(struct internal_mdp_header *header, if (overlay_payload_enqueue(frame)){ op_free(frame); + ob_free(plaintext); return -1; } diff --git a/route_link.c b/route_link.c index 9cf4a2ff..a4a8ad12 100644 --- a/route_link.c +++ b/route_link.c @@ -914,7 +914,7 @@ static void update_alarm(struct __sourceloc __whence, time_ms_t limit) { if (limit == 0) FATALF("limit == 0"); - if (link_send_alarm.alarm>limit){ + if (link_send_alarm.alarm>limit && is_scheduled(&link_send_alarm)){ unschedule(&link_send_alarm); link_send_alarm.alarm = limit; link_send_alarm.deadline = limit+10; @@ -1404,7 +1404,7 @@ int link_receive(struct internal_mdp_header *header, struct overlay_buffer *payl // TODO other link attributes... } } - ob_free(payload); + send_please_explain(&context, my_subscriber, header->source);