You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2015/01/21 15:11:08 UTC
[2/2] qpid-proton git commit: added the PN_REACTOR_QUIESCED event
added the PN_REACTOR_QUIESCED event
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/255946d1
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/255946d1
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/255946d1
Branch: refs/heads/master
Commit: 255946d1ca5bb814a8068b4f5b86dfb4e0610d36
Parents: 6df8ad3
Author: Rafael Schloming <rh...@alum.mit.edu>
Authored: Tue Jan 20 17:06:21 2015 -0500
Committer: Rafael Schloming <rh...@alum.mit.edu>
Committed: Wed Jan 21 09:03:44 2015 -0500
----------------------------------------------------------------------
proton-c/bindings/python/proton/__init__.py | 1 +
proton-c/include/proton/event.h | 6 +++++
proton-c/src/events/event.c | 2 ++
proton-c/src/reactor/reactor.c | 23 ++++++++++++++------
proton-c/src/tests/reactor.c | 22 ++++++++++---------
.../org/apache/qpid/proton/engine/Event.java | 1 +
proton-j/src/main/resources/cengine.py | 1 +
7 files changed, 39 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/255946d1/proton-c/bindings/python/proton/__init__.py
----------------------------------------------------------------------
diff --git a/proton-c/bindings/python/proton/__init__.py b/proton-c/bindings/python/proton/__init__.py
index 0516b65..22ffa6d 100644
--- a/proton-c/bindings/python/proton/__init__.py
+++ b/proton-c/bindings/python/proton/__init__.py
@@ -3316,6 +3316,7 @@ def _none(x): return None
class Event(Wrapper, EventBase):
REACTOR_INIT = EventType(PN_REACTOR_INIT, "on_reactor_init")
+ REACTOR_QUIESCED = EventType(PN_REACTOR_QUIESCED, "on_reactor_quiesced")
REACTOR_FINAL = EventType(PN_REACTOR_FINAL, "on_reactor_final")
TIMER_TASK = EventType(PN_TIMER_TASK, "on_timer_task")
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/255946d1/proton-c/include/proton/event.h
----------------------------------------------------------------------
diff --git a/proton-c/include/proton/event.h b/proton-c/include/proton/event.h
index 2a28dd2..a4d3d52 100644
--- a/proton-c/include/proton/event.h
+++ b/proton-c/include/proton/event.h
@@ -93,6 +93,12 @@ typedef enum {
PN_REACTOR_INIT,
/**
+ * A reactor has no more events to process. Events of this type
+ * point to the reactor.
+ */
+ PN_REACTOR_QUIESCED,
+
+ /**
* A reactor has been stopped. Events of this type point to the reactor.
*/
PN_REACTOR_FINAL,
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/255946d1/proton-c/src/events/event.c
----------------------------------------------------------------------
diff --git a/proton-c/src/events/event.c b/proton-c/src/events/event.c
index 9b98aa1..54ef92f 100644
--- a/proton-c/src/events/event.c
+++ b/proton-c/src/events/event.c
@@ -258,6 +258,8 @@ const char *pn_event_type_name(pn_event_type_t type)
return "PN_EVENT_NONE";
case PN_REACTOR_INIT:
return "PN_REACTOR_INIT";
+ case PN_REACTOR_QUIESCED:
+ return "PN_REACTOR_QUIESCED";
case PN_REACTOR_FINAL:
return "PN_REACTOR_FINAL";
case PN_TIMER_TASK:
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/255946d1/proton-c/src/reactor/reactor.c
----------------------------------------------------------------------
diff --git a/proton-c/src/reactor/reactor.c b/proton-c/src/reactor/reactor.c
index b9346d2..a4f4b31 100644
--- a/proton-c/src/reactor/reactor.c
+++ b/proton-c/src/reactor/reactor.c
@@ -45,6 +45,7 @@ struct pn_reactor_t {
pn_list_t *children;
pn_timer_t *timer;
pn_selectable_t *selectable;
+ pn_event_type_t previous;
pn_timestamp_t now;
bool selected;
};
@@ -70,6 +71,7 @@ static void pn_reactor_initialize(pn_reactor_t *reactor) {
reactor->children = pn_list(PN_OBJECT, 0);
reactor->timer = pn_timer(reactor->collector);
reactor->selectable = NULL;
+ reactor->previous = PN_EVENT_NONE;
reactor->selected = false;
pn_reactor_mark(reactor);
}
@@ -320,13 +322,20 @@ pn_task_t *pn_reactor_schedule(pn_reactor_t *reactor, int delay, pn_handler_t *h
void pn_reactor_process(pn_reactor_t *reactor) {
assert(reactor);
pn_reactor_mark(reactor);
- pn_event_t *event;
- while ((event = pn_collector_peek(reactor->collector))) {
- pni_reactor_dispatch_pre(reactor, event);
- pn_handler_t *handler = pn_event_handler(event, reactor->handler);
- pn_handler_dispatch(handler, event);
- pni_reactor_dispatch_post(reactor, event);
- pn_collector_pop(reactor->collector);
+ while (true) {
+ pn_event_t *event = pn_collector_peek(reactor->collector);
+ if (event) {
+ pni_reactor_dispatch_pre(reactor, event);
+ pn_handler_t *handler = pn_event_handler(event, reactor->handler);
+ pn_handler_dispatch(handler, event);
+ pni_reactor_dispatch_post(reactor, event);
+ reactor->previous = pn_event_type(event);
+ pn_collector_pop(reactor->collector);
+ } else if (reactor->previous != PN_REACTOR_QUIESCED && reactor->previous != PN_REACTOR_FINAL) {
+ pn_collector_put(reactor->collector, PN_OBJECT, reactor, PN_REACTOR_QUIESCED);
+ } else {
+ break;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/255946d1/proton-c/src/tests/reactor.c
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/reactor.c b/proton-c/src/tests/reactor.c
index dc61274..1365f88 100644
--- a/proton-c/src/tests/reactor.c
+++ b/proton-c/src/tests/reactor.c
@@ -137,8 +137,8 @@ static void test_reactor_handler_run(void) {
pn_handler_t *th = test_handler(reactor, events);
pn_handler_add(handler, th);
pn_reactor_run(reactor);
- expect(events, PN_REACTOR_INIT, PN_SELECTABLE_INIT, PN_SELECTABLE_UPDATED, PN_SELECTABLE_UPDATED,
- PN_SELECTABLE_FINAL, PN_REACTOR_FINAL, END);
+ expect(events, PN_REACTOR_INIT, PN_SELECTABLE_INIT, PN_SELECTABLE_UPDATED, PN_REACTOR_QUIESCED,
+ PN_SELECTABLE_UPDATED, PN_SELECTABLE_FINAL, PN_REACTOR_QUIESCED, PN_REACTOR_FINAL, END);
pn_free(reactor);
pn_free(th);
pn_free(events);
@@ -152,8 +152,8 @@ static void test_reactor_handler_run_free(void) {
pn_list_t *events = pn_list(PN_VOID, 0);
pn_handler_add(handler, test_handler(reactor, events));
pn_reactor_run(reactor);
- expect(events, PN_REACTOR_INIT, PN_SELECTABLE_INIT, PN_SELECTABLE_UPDATED, PN_SELECTABLE_UPDATED,
- PN_SELECTABLE_FINAL, PN_REACTOR_FINAL, END);
+ expect(events, PN_REACTOR_INIT, PN_SELECTABLE_INIT, PN_SELECTABLE_UPDATED, PN_REACTOR_QUIESCED,
+ PN_SELECTABLE_UPDATED, PN_SELECTABLE_FINAL, PN_REACTOR_QUIESCED, PN_REACTOR_FINAL, END);
pn_reactor_free(reactor);
pn_free(events);
}
@@ -169,8 +169,8 @@ static void test_reactor_connection(void) {
pn_list_t *revents = pn_list(PN_VOID, 0);
pn_handler_add(root, test_handler(reactor, revents));
pn_reactor_run(reactor);
- expect(revents, PN_REACTOR_INIT, PN_SELECTABLE_INIT, PN_SELECTABLE_UPDATED, PN_SELECTABLE_UPDATED,
- PN_SELECTABLE_FINAL, PN_REACTOR_FINAL, END);
+ expect(revents, PN_REACTOR_INIT, PN_SELECTABLE_INIT, PN_SELECTABLE_UPDATED, PN_REACTOR_QUIESCED,
+ PN_SELECTABLE_UPDATED, PN_SELECTABLE_FINAL, PN_REACTOR_QUIESCED, PN_REACTOR_FINAL, END);
expect(cevents, PN_CONNECTION_INIT, END);
pn_reactor_free(reactor);
pn_handler_free(tch);
@@ -419,8 +419,9 @@ static void test_reactor_schedule(void) {
pn_reactor_schedule(reactor, 0, NULL);
pn_reactor_run(reactor);
pn_reactor_free(reactor);
- expect(events, PN_REACTOR_INIT, PN_SELECTABLE_INIT, PN_SELECTABLE_UPDATED, PN_TIMER_TASK,
- PN_SELECTABLE_UPDATED, PN_SELECTABLE_FINAL, PN_REACTOR_FINAL, END);
+ expect(events, PN_REACTOR_INIT, PN_SELECTABLE_INIT, PN_SELECTABLE_UPDATED, PN_REACTOR_QUIESCED,
+ PN_TIMER_TASK, PN_REACTOR_QUIESCED, PN_SELECTABLE_UPDATED, PN_SELECTABLE_FINAL, PN_REACTOR_QUIESCED,
+ PN_REACTOR_FINAL, END);
pn_free(events);
}
@@ -435,8 +436,9 @@ static void test_reactor_schedule_handler(void) {
pn_reactor_run(reactor);
pn_reactor_free(reactor);
pn_handler_free(th);
- expect(events, PN_REACTOR_INIT, PN_SELECTABLE_INIT, PN_SELECTABLE_UPDATED, PN_SELECTABLE_UPDATED,
- PN_SELECTABLE_FINAL, PN_REACTOR_FINAL, END);
+ expect(events, PN_REACTOR_INIT, PN_SELECTABLE_INIT, PN_SELECTABLE_UPDATED, PN_REACTOR_QUIESCED,
+ PN_REACTOR_QUIESCED, PN_SELECTABLE_UPDATED, PN_SELECTABLE_FINAL, PN_REACTOR_QUIESCED,
+ PN_REACTOR_FINAL, END);
expect(tevents, PN_TIMER_TASK, END);
pn_free(events);
pn_free(tevents);
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/255946d1/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java b/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java
index ed3a421..ebbf648 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java
@@ -31,6 +31,7 @@ public interface Event
public enum Type {
REACTOR_INIT,
+ REACTOR_QUIESCED,
REACTOR_FINAL,
TIMER_TASK,
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/255946d1/proton-j/src/main/resources/cengine.py
----------------------------------------------------------------------
diff --git a/proton-j/src/main/resources/cengine.py b/proton-j/src/main/resources/cengine.py
index 75624c9..69fe4dd 100644
--- a/proton-j/src/main/resources/cengine.py
+++ b/proton-j/src/main/resources/cengine.py
@@ -951,6 +951,7 @@ def pn_transport_condition(trans):
from org.apache.qpid.proton.engine import Event
PN_REACTOR_INIT = Event.Type.REACTOR_INIT
+PN_REACTOR_QUIESCED = Event.Type.REACTOR_QUIESCED
PN_REACTOR_FINAL = Event.Type.REACTOR_FINAL
PN_TIMER_TASK = Event.Type.TIMER_TASK
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org