commit c24f2cf55eee9a5aefe27bcb34822a5737f170cf Author: Timo Teras Date: Mon Sep 14 08:25:09 2009 +0300 peer: reset both events when script triggers otherwise we can get same callback twice. diff --git a/nhrp/nhrp_peer.c b/nhrp/nhrp_peer.c index b447784..e5721a5 100644 --- a/nhrp/nhrp_peer.c +++ b/nhrp/nhrp_peer.c @@ -308,14 +308,16 @@ struct nhrp_peer *nhrp_peer_from_event(union nhrp_peer_event e, int revents) if (revents & EV_CHILD) { peer = container_of(e.child, struct nhrp_peer, child); - ev_timer_stop(&peer->timer); } else if (revents & EV_TIMEOUT) { peer = container_of(e.timer, struct nhrp_peer, timer); - ev_child_stop(&peer->child); } else { NHRP_BUG_ON(revents != 0); peer = container_of(e.child, struct nhrp_peer, child); } + + ev_child_stop(&peer->child); + ev_timer_stop(&peer->timer); + return peer; } diff --git a/nhrp/nhrp_server.c b/nhrp/nhrp_server.c index d928886..ad6e292 100644 --- a/nhrp/nhrp_server.c +++ b/nhrp/nhrp_server.c @@ -195,13 +195,18 @@ static void nhrp_server_finish_reg(struct nhrp_pending_request *pr) static void nhrp_server_finish_cie_reg_cb(union nhrp_peer_event e, int revents) { - struct nhrp_peer *peer = nhrp_peer_from_event(e, revents); - struct nhrp_pending_request *pr = peer->request; - struct nhrp_packet *packet = pr->packet; - struct nhrp_cie *cie = pr->cie; + struct nhrp_peer *peer; + struct nhrp_pending_request *pr; + struct nhrp_packet *packet; + struct nhrp_cie *cie; struct nhrp_peer_selector sel; char tmp[64], reason[32]; + peer = nhrp_peer_from_event(e, revents); + pr = peer->request; + packet = pr->packet; + cie = pr->cie; + peer->request = NULL; nhrp_address_format(&peer->protocol_address, sizeof(tmp), tmp); if (revents != 0 && nhrp_peer_event_ok(e, revents)) {