[Libreoffice-commits] online.git: Branch 'distro/collabora/co-4-2' - loleaflet/js

Michael Meeks (via logerrit) logerrit at kemper.freedesktop.org
Wed Jun 10 14:40:32 UTC 2020


 loleaflet/js/global.js |   33 ++++++++++++++++++++-------------
 1 file changed, 20 insertions(+), 13 deletions(-)

New commits:
commit f05c794b321da38eef62c8501d6523673918cac0
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Tue Jun 9 11:29:11 2020 +0100
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Wed Jun 10 16:40:14 2020 +0200

    Proxy: detect un-responsive sockets & close after 30secs.
    
    Also:
    + fix double poll timer in error
    + remove & rename incorrect interval timer names
    
    Change-Id: Idfae44c0a388312b248c78fc9ad04fe3725990b6
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/95910
    Tested-by: Jenkins
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/96007
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/js/global.js b/loleaflet/js/global.js
index c6590389b..6a0bd23df 100644
--- a/loleaflet/js/global.js
+++ b/loleaflet/js/global.js
@@ -350,14 +350,16 @@
 		};
 		this.sendQueue = '';
 		this._signalErrorClose = function() {
+			clearInterval(this.pollInterval);
+			clearTimeout(this.delaySession);
+			this.pollInterval = undefined;
+			this.delaySession = undefined;
+
 			if (that.readyState < 3)
 			{
 				this.onerror();
 				this.onclose();
 			}
-			clearInterval(this.waitInterval);
-			clearTimeout(this.delaySession);
-			this.waitInterval = undefined;
 			this.sessionId = 'open';
 			this.inSerial = 0;
 			this.outSerial = 0;
@@ -365,9 +367,14 @@
 			this.openInflight = 0;
 			this.readyState = 3; // CLOSED
 		};
+		// For those who think that long-running sockets are a
+		// better way to wait: you're so right. However, each
+		// consumes a scarce server worker thread while it waits,
+		// so ... back in the real world:
 		this._setPollInterval = function(intervalMs) {
-			clearInterval(that.pollInterval);
-			that.pollInterval = setInterval(that.doSend, intervalMs);
+			clearInterval(this.pollInterval);
+			if (this.readyState === 1)
+				this.pollInterval = setInterval(this.doSend, intervalMs);
 		},
 		this.doSend = function () {
 			if (that.sessionId === 'open')
@@ -388,6 +395,11 @@
 					console.debug('High latency connection - too much in-flight, throttling to ' + that.curPollMs + ' ms.');
 					that._setPollInterval(that.curPollMs);
 				}
+				else if (performance.now() - that.lastDataTimestamp > 30 * 1000)
+				{
+					console.debug('Close connection after no response for 30secs');
+					that._signalErrorClose();
+				}
 				else
 					console.debug('High latency connection - too much in-flight, pausing.');
 				return;
@@ -490,12 +502,7 @@
 					that.sessionId = this.responseText;
 					that.readyState = 1;
 					that.onopen();
-
-					// For those who think that long-running sockets are a
-					// better way to wait: you're so right. However, each
-					// consumes a scarce server worker thread while it waits,
-					// so ... back in the real world:
-					that.pollInterval = setInterval(that.doSend, that.curPollMs);
+					that._setPollInterval(that.curPollMs);
 				}
 			});
 			req.addEventListener('loadend', function() {
@@ -540,9 +547,9 @@
 			console.debug('proxy: close socket');
 			this.readyState = 3;
 			this.onclose();
-			clearInterval(this.waitInterval);
+			clearInterval(this.pollInterval);
 			clearTimeout(this.delaySession);
-			this.waitInterval = undefined;
+			this.pollInterval = undefined;
 			if (oldState === 1) // was open
 				this.sendCloseMsg(this.unloading);
 			this.sessionId = 'open';


More information about the Libreoffice-commits mailing list