QAbstractSocket: remove redundant handling of recursive calls

Recursion is alredy prevented by the emittedReadyRead member.
Disabling the read notifications also occurs when:

  - a new chunk of data has arrived on an unbuffered socket;
  - the buffer size limit has been reached on a buffered socket;
  - pauseSocketNotifiers() has been called

Subsequent calls to read() or resumeSocketNotifiers() should re-enable
the notifications independently from possible nesting.

Change-Id: I4587265b8d3ed137516e08fbe92dce2f5eab508c
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Markus Goetz (Woboq GmbH) <markus@woboq.com>
bb10
Alex Trotsenko 2016-01-08 12:48:50 +02:00
parent e666ce162b
commit 982656351b
2 changed files with 2 additions and 27 deletions

View File

@ -549,10 +549,7 @@ static bool isProxyError(QAbstractSocket::SocketError error)
Constructs a QAbstractSocketPrivate. Initializes all members.
*/
QAbstractSocketPrivate::QAbstractSocketPrivate()
: readSocketNotifierCalled(false),
readSocketNotifierState(false),
readSocketNotifierStateSet(false),
emittedReadyRead(false),
: emittedReadyRead(false),
emittedBytesWritten(false),
abortCalled(false),
pendingClose(false),
@ -684,17 +681,6 @@ bool QAbstractSocketPrivate::canReadNotification()
qDebug("QAbstractSocketPrivate::canReadNotification()");
#endif
// Prevent recursive calls
if (readSocketNotifierCalled) {
if (!readSocketNotifierStateSet) {
readSocketNotifierStateSet = true;
readSocketNotifierState = socketEngine->isReadNotificationEnabled();
socketEngine->setReadNotificationEnabled(false);
}
}
QScopedValueRollback<bool> rsncrollback(readSocketNotifierCalled);
readSocketNotifierCalled = true;
if (!isBuffered)
socketEngine->setReadNotificationEnabled(false);
@ -744,13 +730,6 @@ bool QAbstractSocketPrivate::canReadNotification()
if (socketEngine && isBuffered)
socketEngine->setReadNotificationEnabled(readBufferMaxSize == 0 || readBufferMaxSize > q->bytesAvailable());
// reset the read socket notifier state if we reentered inside the
// readyRead() connected slot.
if (readSocketNotifierStateSet && socketEngine &&
readSocketNotifierState != socketEngine->isReadNotificationEnabled()) {
socketEngine->setReadNotificationEnabled(readSocketNotifierState);
readSocketNotifierStateSet = false;
}
return true;
}
@ -2819,7 +2798,7 @@ void QAbstractSocket::setReadBufferSize(qint64 size)
if (d->readBufferMaxSize == size)
return;
d->readBufferMaxSize = size;
if (!d->readSocketNotifierCalled && d->socketEngine) {
if (!d->emittedReadyRead && d->socketEngine) {
// ensure that the read notification is enabled if we've now got
// room in the read buffer
// but only if we're not inside canReadNotification -- that will take care on its own

View File

@ -97,10 +97,6 @@ public:
void _q_abortConnectionAttempt();
void _q_forceDisconnect();
bool readSocketNotifierCalled;
bool readSocketNotifierState;
bool readSocketNotifierStateSet;
bool emittedReadyRead;
bool emittedBytesWritten;