Repository: qpid-proton Updated Branches: refs/heads/master 72b5f9532 -> 8c6c7c531
PROTON-1104: Delay releasing timer and IPC pipes until pn_reactor_stop() Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/8c6c7c53 Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/8c6c7c53 Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/8c6c7c53 Branch: refs/heads/master Commit: 8c6c7c53198f4152472572b8fccc5ab453d9ca86 Parents: 72b5f95 Author: Ken Giusti <[email protected]> Authored: Sun Jan 24 16:59:30 2016 -0500 Committer: Ken Giusti <[email protected]> Committed: Tue Jan 26 08:23:10 2016 -0500 ---------------------------------------------------------------------- proton-c/src/reactor/reactor.c | 41 +++++++++++-------------------------- 1 file changed, 12 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/8c6c7c53/proton-c/src/reactor/reactor.c ---------------------------------------------------------------------- diff --git a/proton-c/src/reactor/reactor.c b/proton-c/src/reactor/reactor.c index 7ea279b..3397e40 100644 --- a/proton-c/src/reactor/reactor.c +++ b/proton-c/src/reactor/reactor.c @@ -406,22 +406,14 @@ bool pn_reactor_process(pn_reactor_t *reactor) { previous = reactor->previous = type; pn_decref(event); pn_collector_pop(reactor->collector); - } else { - if (pni_reactor_more(reactor)) { - if (previous != PN_REACTOR_QUIESCED && reactor->previous != PN_REACTOR_FINAL) { - pn_collector_put(reactor->collector, PN_OBJECT, reactor, PN_REACTOR_QUIESCED); - } else { - return true; - } + } else if (pni_reactor_more(reactor)) { + if (previous != PN_REACTOR_QUIESCED && reactor->previous != PN_REACTOR_FINAL) { + pn_collector_put(reactor->collector, PN_OBJECT, reactor, PN_REACTOR_QUIESCED); } else { - if (reactor->selectable) { - pn_selectable_terminate(reactor->selectable); - pn_reactor_update(reactor, reactor->selectable); - reactor->selectable = NULL; - } else { - return false; - } + return true; } + } else { + return false; } } } @@ -441,25 +433,11 @@ static void pni_timer_readable(pn_selectable_t *sel) { pni_timer_expired(sel); } -static void pni_timer_finalize(pn_selectable_t *sel) { - pn_reactor_t *reactor = pni_reactor(sel); - pn_socket_t fd = pn_selectable_get_fd(sel); - if (fd == reactor->wakeup[0]) { - for (int i = 0; i < 2; i++) { - if (reactor->wakeup[i] != PN_INVALID_SOCKET) { - pn_close(reactor->io, reactor->wakeup[i]); - reactor->wakeup[i] = PN_INVALID_SOCKET; - } - } - } -} - pn_selectable_t *pni_timer_selectable(pn_reactor_t *reactor) { pn_selectable_t *sel = pn_reactor_selectable(reactor); pn_selectable_set_fd(sel, reactor->wakeup[0]); pn_selectable_on_readable(sel, pni_timer_readable); pn_selectable_on_expired(sel, pni_timer_expired); - pn_selectable_on_finalize(sel, pni_timer_finalize); pn_selectable_set_reading(sel, true); pn_selectable_set_deadline(sel, pn_timer_deadline(reactor->timer)); pn_reactor_update(reactor, sel); @@ -484,8 +462,13 @@ void pn_reactor_start(pn_reactor_t *reactor) { void pn_reactor_stop(pn_reactor_t *reactor) { assert(reactor); + if (reactor->selectable) { + pn_selectable_terminate(reactor->selectable); + pn_reactor_update(reactor, reactor->selectable); + reactor->selectable = NULL; + } pn_collector_put(reactor->collector, PN_OBJECT, reactor, PN_REACTOR_FINAL); - // XXX: should consider removing this fron stop to avoid reentrance + // XXX: should consider removing this from stop to avoid reentrance pn_reactor_process(reactor); pn_collector_release(reactor->collector); } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
