Clean up wakeup teardown.

This commit is contained in:
Ian Gulliver
2016-03-08 22:42:15 -08:00
parent 9f5a6223bf
commit c0c25bd36a
2 changed files with 9 additions and 4 deletions

View File

@@ -45,6 +45,7 @@ static void outgoing_resolve(struct outgoing *);
static void outgoing_resolve_wrapper(struct peer *); static void outgoing_resolve_wrapper(struct peer *);
static void outgoing_retry(struct outgoing *outgoing) { static void outgoing_retry(struct outgoing *outgoing) {
outgoing->peer.fd = -1;
uint32_t delay = wakeup_get_retry_delay_ms(++outgoing->attempt); uint32_t delay = wakeup_get_retry_delay_ms(++outgoing->attempt);
LOG(outgoing->id, "Will retry in %ds", delay / 1000); LOG(outgoing->id, "Will retry in %ds", delay / 1000);
outgoing->peer.event_handler = outgoing_resolve_wrapper; outgoing->peer.event_handler = outgoing_resolve_wrapper;

View File

@@ -16,6 +16,12 @@ struct wakeup {
static struct list_head wakeup_head = LIST_HEAD_INIT(wakeup_head); 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) { static void wakeup_handler(struct peer *peer) {
struct wakeup *wakeup = container_of(peer, struct wakeup, 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(read(wakeup->peer.fd, &events, sizeof(events)) == sizeof(events));
assert(events == 1); assert(events == 1);
peer_close(&wakeup->peer);
peer_call(wakeup->inner_peer); peer_call(wakeup->inner_peer);
list_del(&wakeup->wakeup_list); wakeup_del(wakeup);
free(wakeup);
} }
void wakeup_init() { void wakeup_init() {
@@ -35,7 +39,7 @@ void wakeup_init() {
void wakeup_cleanup() { void wakeup_cleanup() {
struct wakeup *iter, *next; struct wakeup *iter, *next;
list_for_each_entry_safe(iter, next, &wakeup_head, wakeup_list) { list_for_each_entry_safe(iter, next, &wakeup_head, wakeup_list) {
free(iter); wakeup_del(iter);
} }
} }