close the transport when the selector reports an error (cherry picked from commit aa5ea2b62fd5680bc2a36bee14f72e037d8cc276)
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/913cb95b Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/913cb95b Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/913cb95b Branch: refs/heads/0.9.x Commit: 913cb95b563c7c6e3232bf3eece2db3ea7614194 Parents: 4c5df77 Author: Rafael Schloming <[email protected]> Authored: Mon Apr 20 07:57:20 2015 -0400 Committer: Robert Gemmell <[email protected]> Committed: Mon Apr 27 15:12:49 2015 +0100 ---------------------------------------------------------------------- proton-c/src/reactor/connection.c | 3 +++ proton-c/src/transport/transport.c | 2 +- tests/python/proton_tests/engine.py | 9 +++++++-- 3 files changed, 11 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/913cb95b/proton-c/src/reactor/connection.c ---------------------------------------------------------------------- diff --git a/proton-c/src/reactor/connection.c b/proton-c/src/reactor/connection.c index 3560fc5..f2bb9e9 100644 --- a/proton-c/src/reactor/connection.c +++ b/proton-c/src/reactor/connection.c @@ -207,6 +207,9 @@ static void pni_connection_writable(pn_selectable_t *sel) static void pni_connection_error(pn_selectable_t *sel) { pn_reactor_t *reactor = (pn_reactor_t *) pni_selectable_get_context(sel); + pn_transport_t *transport = pni_transport(sel); + pn_transport_close_head(transport); + pn_transport_close_tail(transport); pn_selectable_terminate(sel); pn_reactor_update(reactor, sel); } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/913cb95b/proton-c/src/transport/transport.c ---------------------------------------------------------------------- diff --git a/proton-c/src/transport/transport.c b/proton-c/src/transport/transport.c index 10ac8fb..6b2ebe5 100644 --- a/proton-c/src/transport/transport.c +++ b/proton-c/src/transport/transport.c @@ -1648,7 +1648,7 @@ static ssize_t pn_input_read_amqp(pn_transport_t* transport, unsigned int layer, } } - if (!available) { + if (!transport->close_rcvd && !available) { pn_do_error(transport, "amqp:connection:framing-error", "connection aborted"); return PN_EOS; } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/913cb95b/tests/python/proton_tests/engine.py ---------------------------------------------------------------------- diff --git a/tests/python/proton_tests/engine.py b/tests/python/proton_tests/engine.py index 8fabf90..3944b85 100644 --- a/tests/python/proton_tests/engine.py +++ b/tests/python/proton_tests/engine.py @@ -1898,17 +1898,22 @@ class ServerTest(Test): self.conn = event.reactor.connection() self.conn.hostname = "%s:%s" % (server.host, server.port) self.conn.open() + self.remote_condition = None self.old_count = None # verify the connection stays up even if we don't explicitly send stuff # wait up to 3x the idle timeout event.reactor.schedule(3 * idle_timeout, self) + def on_connection_bound(self, event): + self.transport = event.transport + def on_connection_remote_open(self, event): self.old_count = event.transport.frames_output def on_connection_remote_close(self, event): assert self.conn.remote_condition assert self.conn.remote_condition.name == "amqp:resource-limit-exceeded" + self.remote_condition = self.conn.remote_condition def on_timer_task(self, event): assert self.conn.state == (Endpoint.LOCAL_ACTIVE | Endpoint.REMOTE_ACTIVE), "Connection terminated" @@ -1919,8 +1924,8 @@ class ServerTest(Test): p = Program() Reactor(p).run() - assert p.conn.remote_condition - assert p.conn.remote_condition.name == "amqp:resource-limit-exceeded" + assert p.remote_condition + assert p.remote_condition.name == "amqp:resource-limit-exceeded" server.stop() class NoValue: --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
