You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2017/03/29 22:22:53 UTC
[2/3] qpid-proton git commit: PROTON-1452: Test for closed transport
without side effects
PROTON-1452: Test for closed transport without side effects
"closed" tests based on pn_transport_pending/available have side effects: may
generate events or modify read/write buffer pointers, which makes using those
tests very sensitive to ordering.
New pn_transport_(head|tail)_closed have no side effects.
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/893cb001
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/893cb001
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/893cb001
Branch: refs/heads/master
Commit: 893cb00161d29e2e29c7e7304177f3d92418f405
Parents: 7a68a2c
Author: Alan Conway <ac...@redhat.com>
Authored: Wed Mar 29 16:42:31 2017 -0400
Committer: Alan Conway <ac...@redhat.com>
Committed: Wed Mar 29 17:58:56 2017 -0400
----------------------------------------------------------------------
proton-c/include/proton/transport.h | 19 +++++++++++--------
proton-c/src/core/connection_driver.c | 4 ++--
proton-c/src/core/transport.c | 12 ++++++------
3 files changed, 19 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/893cb001/proton-c/include/proton/transport.h
----------------------------------------------------------------------
diff --git a/proton-c/include/proton/transport.h b/proton-c/include/proton/transport.h
index 09fbb03..89b6fad 100644
--- a/proton-c/include/proton/transport.h
+++ b/proton-c/include/proton/transport.h
@@ -610,14 +610,17 @@ PN_EXTERN int pn_transport_close_head(pn_transport_t *transport);
PN_EXTERN bool pn_transport_quiesced(pn_transport_t *transport);
/**
- * Check if a transport is closed.
- *
- * A transport is defined to be closed when both the tail and the head
- * are closed. In other words, when both ::pn_transport_capacity() < 0
- * and ::pn_transport_pending() < 0.
- *
- * @param[in] transport a transport object
- * @return true if the transport is closed, false otherwise
+ * True if pn_transport_close_head() has been called.
+ */
+PN_EXTERN bool pn_transport_head_closed(pn_transport_t *transport);
+
+/**
+ * True if pn_transport_close_tail() has been called.
+ */
+PN_EXTERN bool pn_transport_tail_closed(pn_transport_t *transport);
+
+/**
+ * Equivalent to pn_transport_head_closed(transport) && pn_transport_tail_closed(transport)
*/
PN_EXTERN bool pn_transport_closed(pn_transport_t *transport);
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/893cb001/proton-c/src/core/connection_driver.c
----------------------------------------------------------------------
diff --git a/proton-c/src/core/connection_driver.c b/proton-c/src/core/connection_driver.c
index f5fddae..40af749 100644
--- a/proton-c/src/core/connection_driver.c
+++ b/proton-c/src/core/connection_driver.c
@@ -90,7 +90,7 @@ void pn_connection_driver_read_done(pn_connection_driver_t *d, size_t n) {
}
bool pn_connection_driver_read_closed(pn_connection_driver_t *d) {
- return pn_transport_capacity(d->transport) < 0;
+ return pn_transport_tail_closed(d->transport);
}
void pn_connection_driver_read_close(pn_connection_driver_t *d) {
@@ -111,7 +111,7 @@ void pn_connection_driver_write_done(pn_connection_driver_t *d, size_t n) {
}
bool pn_connection_driver_write_closed(pn_connection_driver_t *d) {
- return pn_transport_pending(d->transport) < 0;
+ return pn_transport_head_closed(d->transport);
}
void pn_connection_driver_write_close(pn_connection_driver_t *d) {
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/893cb001/proton-c/src/core/transport.c
----------------------------------------------------------------------
diff --git a/proton-c/src/core/transport.c b/proton-c/src/core/transport.c
index 444145a..5065663 100644
--- a/proton-c/src/core/transport.c
+++ b/proton-c/src/core/transport.c
@@ -3009,12 +3009,12 @@ bool pn_transport_quiesced(pn_transport_t *transport)
return true;
}
-bool pn_transport_closed(pn_transport_t *transport)
-{
- assert(transport);
- ssize_t capacity = pn_transport_capacity(transport);
- ssize_t pending = pn_transport_pending(transport);
- return capacity < 0 && pending < 0;
+bool pn_transport_head_closed(pn_transport_t *transport) { return transport->head_closed; }
+
+bool pn_transport_tail_closed(pn_transport_t *transport) { return transport->tail_closed; }
+
+bool pn_transport_closed(pn_transport_t *transport) {
+ return transport->head_closed && transport->tail_closed;
}
pn_connection_t *pn_transport_connection(pn_transport_t *transport)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org