diff --git a/ixwebsocket/IXWebSocketTransport.cpp b/ixwebsocket/IXWebSocketTransport.cpp index 6d88a3ce..4a722eef 100644 --- a/ixwebsocket/IXWebSocketTransport.cpp +++ b/ixwebsocket/IXWebSocketTransport.cpp @@ -1041,42 +1041,23 @@ namespace ix _requestInitCancellation = true; if (_readyState == ReadyState::CLOSING || _readyState == ReadyState::CLOSED) return; - - // connection is opened, so close without sending close frame - if (_readyState == ReadyState::OPEN) + { - { - std::lock_guard lock(_closeDataMutex); - _closeCode = code; - _closeReason = reason; - _closeWireSize = closeWireSize; - _closeRemote = remote; - } - { - std::lock_guard lock(_closingTimePointMutex); - _closingTimePoint = std::chrono::steady_clock::now(); - } - setReadyState(ReadyState::CLOSING); - - sendCloseFrame(code, reason); - // wake up the poll, but do not close yet - _socket->wakeUpFromPoll(Socket::kSendRequest); + std::lock_guard lock(_closeDataMutex); + _closeCode = code; + _closeReason = reason; + _closeWireSize = closeWireSize; + _closeRemote = remote; } - else { - { - std::lock_guard lock(_closeDataMutex); - _closeCode = code; - _closeReason = reason; - _closeWireSize = closeWireSize; - _closeRemote = remote; - } - - setReadyState(ReadyState::CLOSED); - - // wake up the poll, and close - _socket->wakeUpFromPoll(Socket::kCloseRequest); + std::lock_guard lock(_closingTimePointMutex); + _closingTimePoint = std::chrono::steady_clock::now(); } + setReadyState(ReadyState::CLOSING); + + sendCloseFrame(code, reason); + // wake up the poll, but do not close yet + _socket->wakeUpFromPoll(Socket::kSendRequest); } size_t WebSocketTransport::bufferedAmount() const