diff options
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/socket/qlocalsocket.h | 1 | ||||
-rw-r--r-- | src/network/socket/qlocalsocket_p.h | 3 | ||||
-rw-r--r-- | src/network/socket/qlocalsocket_win.cpp | 25 |
3 files changed, 9 insertions, 20 deletions
diff --git a/src/network/socket/qlocalsocket.h b/src/network/socket/qlocalsocket.h index 698c06377b..a30f37011a 100644 --- a/src/network/socket/qlocalsocket.h +++ b/src/network/socket/qlocalsocket.h @@ -134,7 +134,6 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_notified()) Q_PRIVATE_SLOT(d_func(), void _q_canWrite()) Q_PRIVATE_SLOT(d_func(), void _q_pipeClosed()) - Q_PRIVATE_SLOT(d_func(), void _q_emitReadyRead()) #else Q_PRIVATE_SLOT(d_func(), void _q_stateChanged(QAbstractSocket::SocketState)) Q_PRIVATE_SLOT(d_func(), void _q_error(QAbstractSocket::SocketError)) diff --git a/src/network/socket/qlocalsocket_p.h b/src/network/socket/qlocalsocket_p.h index a0749fd35f..32781789b0 100644 --- a/src/network/socket/qlocalsocket_p.h +++ b/src/network/socket/qlocalsocket_p.h @@ -134,7 +134,6 @@ public: void _q_notified(); void _q_canWrite(); void _q_pipeClosed(); - void _q_emitReadyRead(); DWORD checkPipeState(); void startAsyncRead(); bool completeAsyncRead(); @@ -148,7 +147,7 @@ public: QWinEventNotifier *dataReadNotifier; QLocalSocket::LocalSocketError error; bool readSequenceStarted; - bool pendingReadyRead; + QTimer *emitReadyReadTimer; bool pipeClosed; static const qint64 initialReadBufferSize = 4096; #else diff --git a/src/network/socket/qlocalsocket_win.cpp b/src/network/socket/qlocalsocket_win.cpp index 5d64479106..cb4d50d658 100644 --- a/src/network/socket/qlocalsocket_win.cpp +++ b/src/network/socket/qlocalsocket_win.cpp @@ -50,6 +50,9 @@ QT_BEGIN_NAMESPACE void QLocalSocketPrivate::init() { Q_Q(QLocalSocket); + emitReadyReadTimer = new QTimer(q); + emitReadyReadTimer->setSingleShot(true); + QObject::connect(emitReadyReadTimer, SIGNAL(timeout()), q, SIGNAL(readyRead())); memset(&overlapped, 0, sizeof(overlapped)); overlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); dataReadNotifier = new QWinEventNotifier(overlapped.hEvent, q); @@ -108,7 +111,7 @@ QLocalSocketPrivate::QLocalSocketPrivate() : QIODevicePrivate(), actualReadBufferSize(0), error(QLocalSocket::UnknownSocketError), readSequenceStarted(false), - pendingReadyRead(false), + emitReadyReadTimer(0), pipeClosed(false), state(QLocalSocket::UnconnectedState) { @@ -236,13 +239,10 @@ qint64 QLocalSocket::readData(char *data, qint64 maxSize) void QLocalSocketPrivate::checkReadyRead() { if (actualReadBufferSize > 0) { - if (!pendingReadyRead) { - Q_Q(QLocalSocket); - QTimer::singleShot(0, q, SLOT(_q_emitReadyRead())); - pendingReadyRead = true; - } + if (!emitReadyReadTimer->isActive()) + emitReadyReadTimer->start(); } else { - pendingReadyRead = false; + emitReadyReadTimer->stop(); } } @@ -516,19 +516,10 @@ void QLocalSocketPrivate::_q_notified() return; } startAsyncRead(); - pendingReadyRead = false; + emitReadyReadTimer->stop(); emit q->readyRead(); } -void QLocalSocketPrivate::_q_emitReadyRead() -{ - if (pendingReadyRead) { - Q_Q(QLocalSocket); - pendingReadyRead = false; - emit q->readyRead(); - } -} - quintptr QLocalSocket::socketDescriptor() const { Q_D(const QLocalSocket); |