diff options
author | Timo Teras <timo.teras@iki.fi> | 2009-09-14 14:05:37 +0300 |
---|---|---|
committer | Timo Teras <timo.teras@iki.fi> | 2009-09-14 14:06:27 +0300 |
commit | 3c471f85eacd8b9d76c98cff4345f3bc84934001 (patch) | |
tree | f3a37128e7c5d5c065292868a3e9952fce394e53 /main/opennhrp/opennhrp-0.11.1-fix.patch | |
parent | 1c0672272ab592c48d7c2b5f6c892868377cc78e (diff) | |
download | aports-3c471f85eacd8b9d76c98cff4345f3bc84934001.tar.bz2 aports-3c471f85eacd8b9d76c98cff4345f3bc84934001.tar.xz |
main/opennhrp: 0.11.1-r1
fix for opennhrp script event handling
Diffstat (limited to 'main/opennhrp/opennhrp-0.11.1-fix.patch')
-rw-r--r-- | main/opennhrp/opennhrp-0.11.1-fix.patch | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/main/opennhrp/opennhrp-0.11.1-fix.patch b/main/opennhrp/opennhrp-0.11.1-fix.patch new file mode 100644 index 00000000..0f838a2c --- /dev/null +++ b/main/opennhrp/opennhrp-0.11.1-fix.patch @@ -0,0 +1,58 @@ +commit c24f2cf55eee9a5aefe27bcb34822a5737f170cf +Author: Timo Teras <timo.teras@iki.fi> +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)) { |