From 4baa72c91dec4e19c0fad5973a65339763d216be Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Tue, 26 Jun 2018 08:15:50 -0700 Subject: [PATCH] avoid data race destroy() sets _serverSocketChannel=INVALID_SOCKET under the lock. Other changes are made before the worker thread starts. --- src/remote/blockingTCPAcceptor.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/remote/blockingTCPAcceptor.cpp b/src/remote/blockingTCPAcceptor.cpp index 3e79500..9fb1d76 100644 --- a/src/remote/blockingTCPAcceptor.cpp +++ b/src/remote/blockingTCPAcceptor.cpp @@ -165,16 +165,18 @@ void BlockingTCPAcceptor::run() { while(socketOpen) { + SOCKET sock; { Lock guard(_mutex); if (_destroyed) break; + sock = _serverSocketChannel; } osiSockAddr address; osiSocklen_t len = sizeof(sockaddr); - SOCKET newClient = epicsSocketAccept(_serverSocketChannel, &address.sa, &len); + SOCKET newClient = epicsSocketAccept(sock, &address.sa, &len); if(newClient!=INVALID_SOCKET) { // accept succeeded ipAddrToDottedIP(&address.ia, ipAddrStr, sizeof(ipAddrStr));