diff --git a/deflect/ServerWorker.cpp b/deflect/ServerWorker.cpp index 5041f06..2352bfe 100644 --- a/deflect/ServerWorker.cpp +++ b/deflect/ServerWorker.cpp @@ -84,7 +84,7 @@ ServerWorker::~ServerWorker() if( !_streamId.isEmpty( )) emit removeStreamSource( _streamId, _sourceId ); - if( _tcpSocket->state() == QAbstractSocket::ConnectedState ) + if( _isConnected( )) _sendQuit(); delete _tcpSocket; @@ -138,7 +138,7 @@ void ServerWorker::_processMessages() _tcpSocket->flush(); // Finish reading messages from the socket if connection closed - if( _tcpSocket->state() != QAbstractSocket::ConnectedState ) + if( !_isConnected( )) { while( _tcpSocket->bytesAvailable() >= headerSize ) _receiveMessage(); @@ -321,8 +321,13 @@ bool ServerWorker::_send( const MessageHeader& messageHeader ) void ServerWorker::_flushSocket() { _tcpSocket->flush(); - while( _tcpSocket->bytesToWrite() > 0 ) + while( _tcpSocket->bytesToWrite() > 0 && _isConnected( )) _tcpSocket->waitForBytesWritten(); } +bool ServerWorker::_isConnected() const +{ + return _tcpSocket->state() == QTcpSocket::ConnectedState; +} + } diff --git a/deflect/ServerWorker.h b/deflect/ServerWorker.h index 75a04a9..d127219 100644 --- a/deflect/ServerWorker.h +++ b/deflect/ServerWorker.h @@ -112,6 +112,7 @@ private slots: void _sendQuit(); bool _send( const MessageHeader& messageHeader ); void _flushSocket(); + bool _isConnected() const; }; } diff --git a/doc/Changelog.md b/doc/Changelog.md index 4d4f594..8a6cdc1 100644 --- a/doc/Changelog.md +++ b/doc/Changelog.md @@ -5,6 +5,9 @@ Changelog {#Changelog} ### 0.12.0 (git master) +* [115](https://github.com/BlueBrain/Deflect/pull/115): + Bugfix for possible endless loop of warnings in ServerWorker::_flushSocket(): + "QAbstractSocket::waitForBytesWritten() is not allowed in UnconnectedState" * [114](https://github.com/BlueBrain/Deflect/pull/114): QmlStreamer: added support for keyboard events