You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kg...@apache.org on 2016/01/26 14:29:11 UTC

qpid-proton git commit: PROTON-1104: Delay releasing timer and IPC pipes until pn_reactor_stop()

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 <kg...@apache.org>
Authored: Sun Jan 24 16:59:30 2016 -0500
Committer: Ken Giusti <kg...@apache.org>
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: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org