diff options
author | Alex Trotsenko <[email protected]> | 2021-07-22 12:00:19 +0300 |
---|---|---|
committer | Alex Trotsenko <[email protected]> | 2021-07-24 11:53:12 +0300 |
commit | 594948a07b8086c96ba720e92473c6175d4ac918 (patch) | |
tree | 58bf757e0e38fa4df28c46ae8b8d08efefd1c4b6 | |
parent | 3221c8dbbebc8dc5e521077ae4a191bdcfa36ffa (diff) |
QLocalSocket: call abort() instead of close() on destruction
The QLocalSocket destructor should immediately close the connection
and destroy the socket, clearing any pending data in the write buffer.
The abort() call ensures that the pipe is destroyed on Windows, making
the additional call to destroyPipeHandles() from the private destructor
unnecessary.
Change-Id: Ic7a0d8cf2779cd933cded864c8bab0d096469499
Reviewed-by: Oswald Buddenhagen <[email protected]>
-rw-r--r-- | src/network/socket/qlocalsocket.cpp | 2 | ||||
-rw-r--r-- | src/network/socket/qlocalsocket_p.h | 1 | ||||
-rw-r--r-- | src/network/socket/qlocalsocket_win.cpp | 19 |
3 files changed, 9 insertions, 13 deletions
diff --git a/src/network/socket/qlocalsocket.cpp b/src/network/socket/qlocalsocket.cpp index 12b9f45a142..fba7f756633 100644 --- a/src/network/socket/qlocalsocket.cpp +++ b/src/network/socket/qlocalsocket.cpp @@ -397,7 +397,7 @@ QLocalSocket::QLocalSocket(QObject * parent) */ QLocalSocket::~QLocalSocket() { - QLocalSocket::close(); + abort(); #if !defined(Q_OS_WIN) && !defined(QT_LOCALSOCKET_TCP) Q_D(QLocalSocket); d->unixSocket.setParent(nullptr); diff --git a/src/network/socket/qlocalsocket_p.h b/src/network/socket/qlocalsocket_p.h index 8dd71ece546..036ce488852 100644 --- a/src/network/socket/qlocalsocket_p.h +++ b/src/network/socket/qlocalsocket_p.h @@ -132,7 +132,6 @@ public: void _q_errorOccurred(QAbstractSocket::SocketError newError); #elif defined(Q_OS_WIN) ~QLocalSocketPrivate(); - void destroyPipeHandles(); qint64 pipeWriterBytesToWrite() const; void _q_canRead(); void _q_bytesWritten(qint64 bytes); diff --git a/src/network/socket/qlocalsocket_win.cpp b/src/network/socket/qlocalsocket_win.cpp index 59d628d4d61..bd299d6cf5b 100644 --- a/src/network/socket/qlocalsocket_win.cpp +++ b/src/network/socket/qlocalsocket_win.cpp @@ -161,15 +161,9 @@ QLocalSocketPrivate::QLocalSocketPrivate() : QIODevicePrivate(), QLocalSocketPrivate::~QLocalSocketPrivate() { - destroyPipeHandles(); -} - -void QLocalSocketPrivate::destroyPipeHandles() -{ - if (handle != INVALID_HANDLE_VALUE) { - DisconnectNamedPipe(handle); - CloseHandle(handle); - } + Q_ASSERT(state == QLocalSocket::UnconnectedState); + Q_ASSERT(handle == INVALID_HANDLE_VALUE); + Q_ASSERT(pipeWriter == nullptr); } void QLocalSocket::connectToServer(OpenMode openMode) @@ -346,8 +340,11 @@ void QLocalSocketPrivate::_q_pipeClosed() pipeReader->stop(); delete pipeWriter; pipeWriter = nullptr; - destroyPipeHandles(); - handle = INVALID_HANDLE_VALUE; + if (handle != INVALID_HANDLE_VALUE) { + DisconnectNamedPipe(handle); + CloseHandle(handle); + handle = INVALID_HANDLE_VALUE; + } state = QLocalSocket::UnconnectedState; emit q->stateChanged(state); |