diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/rfb/VNCSConnectionST.cxx | 17 | ||||
-rw-r--r-- | common/rfb/VNCSConnectionST.h | 2 |
2 files changed, 7 insertions, 12 deletions
diff --git a/common/rfb/VNCSConnectionST.cxx b/common/rfb/VNCSConnectionST.cxx index 0f4ca942..3a072ef0 100644 --- a/common/rfb/VNCSConnectionST.cxx +++ b/common/rfb/VNCSConnectionST.cxx @@ -75,8 +75,7 @@ VNCSConnectionST::VNCSConnectionST(VNCServerST* server_, network::Socket *s, pingCounter(0), congestionTimer(this), server(server_), updates(false), updateRenderedCursor(false), removeRenderedCursor(false), - continuousUpdates(false), encodeManager(this), - updateTimer(this), pointerEventTime(0), + continuousUpdates(false), encodeManager(this), pointerEventTime(0), accessRights(AccessDefault), startTime(time(0)) { setStreams(&sock->inStream(), &sock->outStream()); @@ -196,6 +195,10 @@ void VNCSConnectionST::flushSocket() try { setSocketTimeouts(); sock->outStream().flush(); + // Flushing the socket might release an update that was previously + // delayed because of congestion. + if (sock->outStream().bufferUsage() == 0) + writeFramebufferUpdate(); } catch (rdr::Exception &e) { close(e.str()); } @@ -741,9 +744,7 @@ void VNCSConnectionST::supportsContinuousUpdates() bool VNCSConnectionST::handleTimeout(Timer* t) { try { - if (t == &updateTimer) - writeFramebufferUpdate(); - else if (t == &congestionTimer) + if (t == &congestionTimer) updateCongestion(); else if (t == &queryConnectTimer) { if (state() == RFBSTATE_QUERYING) @@ -939,8 +940,6 @@ void VNCSConnectionST::writeFramebufferUpdate() bool needNewUpdateInfo; bool drawRenderedCursor; - updateTimer.stop(); - // We're in the middle of processing a command that's supposed to be // synchronised. Allowing an update to slip out right now might violate // that synchronisation. @@ -960,10 +959,8 @@ void VNCSConnectionST::writeFramebufferUpdate() // Check that we actually have some space on the link and retry in a // bit if things are congested. - if (isCongested()) { - updateTimer.start(50); + if (isCongested()) return; - } // In continuous mode, we will be outputting at least three distinct // messages. We need to aggregate these in order to not clog up TCP's diff --git a/common/rfb/VNCSConnectionST.h b/common/rfb/VNCSConnectionST.h index 55b7ca3e..3f0163a3 100644 --- a/common/rfb/VNCSConnectionST.h +++ b/common/rfb/VNCSConnectionST.h @@ -205,8 +205,6 @@ namespace rfb { Region cuRegion; EncodeManager encodeManager; - Timer updateTimer; - std::set<rdr::U32> pressedKeys; time_t lastEventTime; |