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 2019/07/29 17:24:16 UTC
[qpid-proton] branch master updated: PROTON-2081: Hang in Windows
proactor during connect - thread race
This is an automated email from the ASF dual-hosted git repository.
cliffjansen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-proton.git
The following commit(s) were added to refs/heads/master by this push:
new 85726a4 PROTON-2081: Hang in Windows proactor during connect - thread race
85726a4 is described below
commit 85726a4539a037fd2965f91748d0c8ae4d3d90a3
Author: Cliff Jansen <cl...@apache.org>
AuthorDate: Mon Jul 29 10:06:48 2019 -0700
PROTON-2081: Hang in Windows proactor during connect - thread race
---
c/src/proactor/win_iocp.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/c/src/proactor/win_iocp.c b/c/src/proactor/win_iocp.c
index 429f6e1..d4951d0 100644
--- a/c/src/proactor/win_iocp.c
+++ b/c/src/proactor/win_iocp.c
@@ -2656,15 +2656,19 @@ static bool connect_step(pconnection_t *pc) {
LPFN_CONNECTEX fn_connect_ex = lookup_connect_ex2(iocpd->socket);
// addrinfo is owned by the pconnection so pass NULL to the connect result
connect_result_t *result = connect_result(iocpd, NULL);
+ iocpd->ops_in_progress++;
+ iocpd->active_completer = &pc->psocket;
+ // getpeername unreliable for outgoing connections, but we know it at this point
+ memcpy(&pc->remote.ss, ai->ai_addr, ai->ai_addrlen);
DWORD unused;
bool success = fn_connect_ex(iocpd->socket, ai->ai_addr, ai->ai_addrlen,
NULL, 0, &unused, (LPOVERLAPPED) result);
if (success || WSAGetLastError() == ERROR_IO_PENDING) {
- iocpd->ops_in_progress++;
- iocpd->active_completer = &pc->psocket;
- // getpeername unreliable for outgoing connections, but we know it at this point
- memcpy(&pc->remote.ss, ai->ai_addr, ai->ai_addrlen);
return true; // logic resumes at connect_step_done()
+ } else {
+ iocpd->ops_in_progress--;
+ iocpd->active_completer = NULL;
+ memset(&pc->remote.ss, 0, sizeof(pc->remote.ss));
}
pn_free(result);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org