You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by cl...@apache.org on 2015/01/13 16:51:43 UTC
qpid-proton git commit: PROTON-798: fix hang for socket close during
SSL negotiation
Repository: qpid-proton
Updated Branches:
refs/heads/master da1411e73 -> fc66f4c44
PROTON-798: fix hang for socket close during SSL negotiation
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/fc66f4c4
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/fc66f4c4
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/fc66f4c4
Branch: refs/heads/master
Commit: fc66f4c445996ba083fb8455594b2f14b1aaa275
Parents: da1411e
Author: Clifford Jansen <cl...@apache.org>
Authored: Tue Jan 13 07:50:25 2015 -0800
Committer: Clifford Jansen <cl...@apache.org>
Committed: Tue Jan 13 07:50:25 2015 -0800
----------------------------------------------------------------------
proton-c/src/windows/iocp.c | 10 +++++++---
proton-c/src/windows/schannel.c | 18 ++++++++++++------
2 files changed, 19 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/fc66f4c4/proton-c/src/windows/iocp.c
----------------------------------------------------------------------
diff --git a/proton-c/src/windows/iocp.c b/proton-c/src/windows/iocp.c
index 7b03b42..6acff41 100644
--- a/proton-c/src/windows/iocp.c
+++ b/proton-c/src/windows/iocp.c
@@ -1060,12 +1060,16 @@ static void zombie_list_hard_close_all(iocp_t *iocp)
static void iocp_shutdown(iocpdesc_t *iocpd)
{
+ bool disconnected = false;
if (shutdown(iocpd->socket, SD_SEND)) {
- if (iocpd->iocp->iocp_trace)
- iocp_log("socket shutdown failed %d\n", WSAGetLastError());
+ int err = WSAGetLastError();
+ if (err == WSAECONNABORTED || err == WSAECONNRESET || err == WSAENOTCONN)
+ disconnected = true;
+ else if (iocpd->iocp->iocp_trace)
+ iocp_log("socket shutdown failed %d\n", err);
}
iocpd->write_closed = true;
- if (iocpd->read_closed) {
+ if (iocpd->read_closed || disconnected) {
closesocket(iocpd->socket);
iocpd->socket = INVALID_SOCKET;
}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/fc66f4c4/proton-c/src/windows/schannel.c
----------------------------------------------------------------------
diff --git a/proton-c/src/windows/schannel.c b/proton-c/src/windows/schannel.c
index b775b52..353ce9b 100644
--- a/proton-c/src/windows/schannel.c
+++ b/proton-c/src/windows/schannel.c
@@ -1654,12 +1654,18 @@ static ssize_t process_output_ssl( pn_transport_t *transport, unsigned int layer
}
}
- if (ssl->network_out_pending == 0 && ssl->state == SHUTTING_DOWN) {
- if (!ssl->queued_shutdown) {
- start_ssl_shutdown(transport);
- work_pending = true;
- } else {
- ssl->state = SSL_CLOSED;
+ if (ssl->network_out_pending == 0) {
+ if (ssl->state == SHUTTING_DOWN) {
+ if (!ssl->queued_shutdown) {
+ start_ssl_shutdown(transport);
+ work_pending = true;
+ } else {
+ ssl->state = SSL_CLOSED;
+ }
+ }
+ else if (ssl->state == NEGOTIATING && ssl->app_input_closed) {
+ ssl->app_output_closed = PN_EOS;
+ ssl->state = SSL_CLOSED;
}
}
} while (work_pending);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org