From c0c25bd36a3d5b7cbbec414dc36b8df42f60c9fa Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Tue, 8 Mar 2016 22:42:15 -0800 Subject: [PATCH] Clean up wakeup teardown. --- adsbus/outgoing.c | 1 + adsbus/wakeup.c | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/adsbus/outgoing.c b/adsbus/outgoing.c index 3054219..a868579 100644 --- a/adsbus/outgoing.c +++ b/adsbus/outgoing.c @@ -45,6 +45,7 @@ static void outgoing_resolve(struct outgoing *); static void outgoing_resolve_wrapper(struct peer *); static void outgoing_retry(struct outgoing *outgoing) { + outgoing->peer.fd = -1; uint32_t delay = wakeup_get_retry_delay_ms(++outgoing->attempt); LOG(outgoing->id, "Will retry in %ds", delay / 1000); outgoing->peer.event_handler = outgoing_resolve_wrapper; diff --git a/adsbus/wakeup.c b/adsbus/wakeup.c index 1b66073..1dfb5b9 100644 --- a/adsbus/wakeup.c +++ b/adsbus/wakeup.c @@ -16,6 +16,12 @@ struct wakeup { static struct list_head wakeup_head = LIST_HEAD_INIT(wakeup_head); +static void wakeup_del(struct wakeup *wakeup) { + peer_close(&wakeup->peer); + list_del(&wakeup->wakeup_list); + free(wakeup); +} + static void wakeup_handler(struct peer *peer) { struct wakeup *wakeup = container_of(peer, struct wakeup, peer); @@ -23,10 +29,8 @@ static void wakeup_handler(struct peer *peer) { assert(read(wakeup->peer.fd, &events, sizeof(events)) == sizeof(events)); assert(events == 1); - peer_close(&wakeup->peer); peer_call(wakeup->inner_peer); - list_del(&wakeup->wakeup_list); - free(wakeup); + wakeup_del(wakeup); } void wakeup_init() { @@ -35,7 +39,7 @@ void wakeup_init() { void wakeup_cleanup() { struct wakeup *iter, *next; list_for_each_entry_safe(iter, next, &wakeup_head, wakeup_list) { - free(iter); + wakeup_del(iter); } }