diff options
Diffstat (limited to 'pingu_ping.c')
-rw-r--r-- | pingu_ping.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/pingu_ping.c b/pingu_ping.c index 3eb413d..8ef0596 100644 --- a/pingu_ping.c +++ b/pingu_ping.c @@ -33,17 +33,22 @@ static void pingu_ping_free(struct ev_loop *loop, struct pingu_ping *ping) { list_del(&ping->ping_list_entry); ev_timer_stop(loop, &ping->timeout_watcher); - pingu_host_verify_status(loop, ping->host); free(ping); } +static void pingu_ping_verify_and_free(struct ev_loop *loop, struct pingu_ping *ping) +{ + pingu_host_verify_status(loop, ping->host); + pingu_ping_free(loop, ping); +} + static void pingu_ping_timeout_cb(struct ev_loop *loop, ev_timer *w, int revents) { struct pingu_ping *ping = container_of(w, struct pingu_ping, timeout_watcher); log_debug("%s: seq %i (%i/%i) timed out", ping->host->label, ping->seq, ping->host->burst.pings_sent, ping->host->max_retries); - pingu_ping_free(loop, ping); + pingu_ping_verify_and_free(loop, ping); } static struct pingu_ping *pingu_ping_add(struct ev_loop *loop, @@ -85,7 +90,7 @@ static void pingu_ping_handle_reply(struct ev_loop *loop, log_debug("%s: got seq %i (%i/%i)", ping->host->label, ping->seq, ping->host->burst.pings_replied, ping->host->required_replies); - pingu_ping_free(loop, ping); + pingu_ping_verify_and_free(loop, ping); } int pingu_ping_send(struct ev_loop *loop, struct pingu_host *host, @@ -130,11 +135,10 @@ void pingu_ping_read_reply(struct ev_loop *loop, struct pingu_iface *iface) pingu_ping_handle_reply(loop, ping); } -void pingu_ping_cleanup(struct list_head *ping_list) +void pingu_ping_cleanup(struct ev_loop *loop, struct list_head *ping_list) { struct pingu_ping *ping, *n; list_for_each_entry_safe(ping, n, ping_list, ping_list_entry) { - list_del(&ping->ping_list_entry); - free(ping); + pingu_ping_free(loop, ping); } } |