Browse Source

Merge pull request #1294 from paullouisageneau/tcptransport-sendmutex

Fix lock order inversion in TcpTransport
Paul-Louis Ageneau 8 months ago
parent
commit
e80ba94127
1 changed files with 13 additions and 13 deletions
  1. 13 13
      src/impl/tcptransport.cpp

+ 13 - 13
src/impl/tcptransport.cpp

@@ -200,23 +200,23 @@ void TcpTransport::resolve() {
 }
 
 void TcpTransport::attempt() {
-	std::lock_guard lock(mSendMutex);
+	try {
+		std::lock_guard lock(mSendMutex);
 
-	if (state() != State::Connecting)
-		return; // Cancelled
+		if (state() != State::Connecting)
+			return; // Cancelled
 
-	if (mSock == INVALID_SOCKET) {
-		::closesocket(mSock);
-		mSock = INVALID_SOCKET;
-	}
+		if (mSock == INVALID_SOCKET) {
+			::closesocket(mSock);
+			mSock = INVALID_SOCKET;
+		}
 
-	if (mResolved.empty()) {
-		PLOG_WARNING << "Connection to " << mHostname << ":" << mService << " failed";
-		changeState(State::Failed);
-		return;
-	}
+		if (mResolved.empty()) {
+			PLOG_WARNING << "Connection to " << mHostname << ":" << mService << " failed";
+			changeState(State::Failed);
+			return;
+		}
 
-	try {
 		auto [addr, addrlen] = mResolved.front();
 		mResolved.pop_front();