[Libreoffice-commits] online.git: Branch 'libreoffice-6-4' - 6 commits - loleaflet/css loleaflet/src net/Socket.hpp net/SslSocket.hpp net/WebSocketHandler.hpp wsd/LOOLWSD.hpp

Michael Meeks (via logerrit) logerrit at kemper.freedesktop.org
Tue Dec 10 14:45:02 UTC 2019


 loleaflet/css/toolbar.css                    |    5 +---
 loleaflet/src/layer/tile/CalcTileLayer.js    |    5 ----
 loleaflet/src/layer/tile/GridLayer.js        |   29 +++++++++++++++------------
 loleaflet/src/layer/tile/ImpressTileLayer.js |    5 ----
 loleaflet/src/layer/tile/WriterTileLayer.js  |    1 
 net/Socket.hpp                               |    3 +-
 net/SslSocket.hpp                            |   21 ++++++++++++++-----
 net/WebSocketHandler.hpp                     |    2 -
 wsd/LOOLWSD.hpp                              |    2 -
 9 files changed, 39 insertions(+), 34 deletions(-)

New commits:
commit 3d330d653f3b8f9795e32313ee27fc1af105320d
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Tue Dec 10 11:11:20 2019 +0000
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Tue Dec 10 14:07:49 2019 +0000

    tdf#129306 SslSocket: handle EAGAIN properly.
    
    Change-Id: I9fb3323b8d071fdc50399a67eb6b0aaeed9342b0

diff --git a/net/Socket.hpp b/net/Socket.hpp
index 730f7194b..98479841b 100644
--- a/net/Socket.hpp
+++ b/net/Socket.hpp
@@ -831,7 +831,8 @@ public:
 
     ~StreamSocket()
     {
-        LOG_DBG("StreamSocket dtor #" << getFD());
+        LOG_DBG("StreamSocket dtor #" << getFD() << " with pending "
+                "write: " << _outBuffer.size() << ", read: " << _inBuffer.size());
 
         if (!_closed)
         {
diff --git a/net/SslSocket.hpp b/net/SslSocket.hpp
index de16fdf1d..ba9954f56 100644
--- a/net/SslSocket.hpp
+++ b/net/SslSocket.hpp
@@ -22,28 +22,30 @@ public:
     SslStreamSocket(const int fd, bool isClient,
                     std::shared_ptr<SocketHandlerInterface> responseClient) :
         StreamSocket(fd, isClient, std::move(responseClient)),
+        _bio(nullptr),
         _ssl(nullptr),
         _sslWantsTo(SslWantsTo::Neither),
         _doHandshake(true)
     {
         LOG_DBG("SslStreamSocket ctor #" << fd);
 
-        BIO* bio = BIO_new(BIO_s_socket());
-        if (bio == nullptr)
+        _bio = BIO_new(BIO_s_socket());
+        if (_bio == nullptr)
         {
             throw std::runtime_error("Failed to create SSL BIO.");
         }
 
-        BIO_set_fd(bio, fd, BIO_NOCLOSE);
+        BIO_set_fd(_bio, fd, BIO_NOCLOSE);
 
         _ssl = SslContext::newSsl();
         if (!_ssl)
         {
-            BIO_free(bio);
+            BIO_free(_bio);
+            _bio = nullptr;
             throw std::runtime_error("Failed to create SSL.");
         }
 
-        SSL_set_bio(_ssl, bio, bio);
+        SSL_set_bio(_ssl, _bio, _bio);
 
         if (isClient)
         {
@@ -240,6 +242,14 @@ private:
             // Fallthrough...
         default:
             {
+                // Effectively an EAGAIN error at the BIO layer
+                if (BIO_should_retry(_bio))
+                {
+                    LOG_TRC("Socket #" << getFD() << " BIO asks for retry - underlying EAGAIN? " <<
+                            SSL_get_error(_ssl, rc));
+                    return -1; // poll is used to detect real errors.
+                }
+
                 if (sslError == SSL_ERROR_SSL)
                     LOG_TRC("Socket #" << getFD() << " SSL error: SSL (" << sslError << ").");
                 else if (sslError == SSL_ERROR_SYSCALL)
@@ -289,6 +299,7 @@ private:
     }
 
 private:
+    BIO* _bio;
     SSL* _ssl;
     /// During handshake SSL might want to read
     /// on write, or write on read.
commit 4937af15f811182291f1e75e21bbf21a6a06b326
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Mon Dec 9 16:37:23 2019 +0000
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Tue Dec 10 14:07:40 2019 +0000

    prefetch: disable interval timer when we've pre-fetched everything.
    
    Change-Id: I9d3b3819b3d9a960aa31f729686315e9e5d6d8e1

diff --git a/loleaflet/src/layer/tile/GridLayer.js b/loleaflet/src/layer/tile/GridLayer.js
index d9ff748a3..4db50a473 100644
--- a/loleaflet/src/layer/tile/GridLayer.js
+++ b/loleaflet/src/layer/tile/GridLayer.js
@@ -1278,6 +1278,9 @@ L.GridLayer = L.Layer.extend({
 			var fragment = document.createDocumentFragment();
 			this._addTiles(finalQueue, fragment);
 			this._level.el.appendChild(fragment);
+		} else {
+			clearInterval(this._tilesPreFetcher);
+			this._tilesPreFetcher = undefined;
 		}
 	},
 
@@ -1285,8 +1288,10 @@ L.GridLayer = L.Layer.extend({
 		if (!this._map) {
 			return;
 		}
-		clearInterval(this._tilesPreFetcher);
-		clearTimeout(this._preFetchIdle);
+		if (this._tilesPreFetcher)
+			clearInterval(this._tilesPreFetcher);
+		if (this._preFetchIdle)
+			clearTimeout(this._preFetchIdle);
 		if (resetBorder) {
 			this._preFetchBorder = null;
 		}
@@ -1295,6 +1300,7 @@ L.GridLayer = L.Layer.extend({
 		this._preFetchPart = this._selectedPart;
 		this._preFetchIdle = setTimeout(L.bind(function () {
 			this._tilesPreFetcher = setInterval(L.bind(this._preFetchTiles, this), interval);
+			this._prefetchIdle = undefined;
 		}, this), idleTime);
 	}
 });
commit 9c18156416cb4aff208714054018c748750bb153
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Mon Dec 9 16:14:26 2019 +0000
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Tue Dec 10 14:07:37 2019 +0000

    prefetch: cleanup, and avoid constant growth of pre-loading area.
    
    We were inadvertently mutating and growing our copy of the bounds
    to fetch here, causing a chunk of un-necessary rendering load,
    particularly for spreadsheets.
    
    Change-Id: Ia01565c043d1cb0172cabbec16d941dd8b66dd05

diff --git a/loleaflet/src/layer/tile/CalcTileLayer.js b/loleaflet/src/layer/tile/CalcTileLayer.js
index 37c6f9b0a..8bd816214 100644
--- a/loleaflet/src/layer/tile/CalcTileLayer.js
+++ b/loleaflet/src/layer/tile/CalcTileLayer.js
@@ -547,7 +547,6 @@ L.CalcTileLayer = L.TileLayer.extend({
 				}
 				else {
 					// tile outside of the visible area, just remove it
-					this._preFetchBorder = null;
 					this._removeTile(key);
 				}
 			}
@@ -665,10 +664,6 @@ L.CalcTileLayer = L.TileLayer.extend({
 			});
 			this._resetPreFetching(true);
 			this._update();
-			if (this._preFetchPart !== this._selectedPart) {
-				this._preFetchPart = this._selectedPart;
-				this._preFetchBorder = null;
-			}
 		}
 	},
 
diff --git a/loleaflet/src/layer/tile/GridLayer.js b/loleaflet/src/layer/tile/GridLayer.js
index 7623f7cd8..d9ff748a3 100644
--- a/loleaflet/src/layer/tile/GridLayer.js
+++ b/loleaflet/src/layer/tile/GridLayer.js
@@ -1185,6 +1185,7 @@ L.GridLayer = L.Layer.extend({
 		var zoom = this._map.getZoom();
 		var tilesToFetch = 10;
 		var maxBorderWidth = 5;
+		var tileBorderSrc;
 
 		if (this._map._permission === 'edit') {
 			tilesToFetch = 5;
@@ -1192,19 +1193,17 @@ L.GridLayer = L.Layer.extend({
 		}
 
 		if (!this._preFetchBorder) {
-			if (this._selectedPart !== this._preFetchPart) {
-				// all tiles from the new part have to be pre-fetched
-				var tileBorder = this._preFetchBorder = new L.Bounds(new L.Point(0, 0), new L.Point(0, 0));
-			}
-			else {
-				var pixelBounds = this._map.getPixelBounds(center, zoom);
-				tileBorder = this._pxBoundsToTileRange(pixelBounds);
-				this._preFetchBorder = tileBorder;
-			}
+			var pixelBounds = this._map.getPixelBounds(center, zoom);
+			tileBorderSrc = this._pxBoundsToTileRange(pixelBounds);
+			this._preFetchBorder = tileBorderSrc;
 		}
 		else {
-			tileBorder = this._preFetchBorder;
+			tileBorderSrc = this._preFetchBorder;
 		}
+
+		// We mutate this - so need a temporary copy
+		var tileBorder = new L.Bounds(tileBorderSrc.min, tileBorderSrc.max);
+
 		var queue = [],
 		    finalQueue = [],
 		    visitedTiles = {},
diff --git a/loleaflet/src/layer/tile/ImpressTileLayer.js b/loleaflet/src/layer/tile/ImpressTileLayer.js
index d35df5aaa..97a1f7bba 100644
--- a/loleaflet/src/layer/tile/ImpressTileLayer.js
+++ b/loleaflet/src/layer/tile/ImpressTileLayer.js
@@ -654,7 +654,6 @@ L.ImpressTileLayer = L.TileLayer.extend({
 				}
 				else {
 					// tile outside of the visible area, just remove it
-					this._preFetchBorder = null;
 					this._removeTile(key);
 				}
 			}
@@ -729,10 +728,6 @@ L.ImpressTileLayer = L.TileLayer.extend({
 			this._selectedParts = command.selectedParts || [command.selectedPart];
 			this._resetPreFetching(true);
 			this._update();
-			if (this._preFetchPart !== this._selectedPart) {
-				this._preFetchPart = this._selectedPart;
-				this._preFetchBorder = null;
-			}
 			var partMatch = textMsg.match(/[^\r\n]+/g);
 			// only get the last matches
 			this._partHashes = partMatch.slice(partMatch.length - this._parts);
diff --git a/loleaflet/src/layer/tile/WriterTileLayer.js b/loleaflet/src/layer/tile/WriterTileLayer.js
index 5fd7643e6..b922dead6 100644
--- a/loleaflet/src/layer/tile/WriterTileLayer.js
+++ b/loleaflet/src/layer/tile/WriterTileLayer.js
@@ -318,7 +318,6 @@ L.WriterTileLayer = L.TileLayer.extend({
 				}
 				else {
 					// tile outside of the visible area, just remove it
-					this._preFetchBorder = null;
 					this._removeTile(key);
 				}
 			}
commit 3a79dcff85ce12d84225811b2e341da57ade67fa
Author:     mert <mert.tumer at collabora.com>
AuthorDate: Tue Nov 26 20:17:49 2019 +0300
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Tue Dec 10 14:06:17 2019 +0000

    fix Insert shape dropdown is too narrow on desktop
    
    Change-Id: Id128cd455e3efb34498511434a38c03efa93c602
    Reviewed-on: https://gerrit.libreoffice.org/83814
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
    Tested-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/loleaflet/css/toolbar.css b/loleaflet/css/toolbar.css
index 9dbcf29c7..1fd1e4b79 100644
--- a/loleaflet/css/toolbar.css
+++ b/loleaflet/css/toolbar.css
@@ -744,9 +744,8 @@ button.leaflet-control-search-next
 		background: rgba(255, 255, 255, 0.5);
 		position: relative;
 		padding: 2px;
-		display: block;
-		overflow: auto; /* child margins otherwise don't expand *this* element (parent) */
-		width: 100%;
+		display: inline-block;
+		width:  350px;
 		height: 100%;
 }
 
commit 06a45b328872d5892d7cbf0d33da3d0d11bfca80
Author:     Corentin Noël <corentin.noel at collabora.com>
AuthorDate: Fri Nov 22 16:50:49 2019 +0100
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Tue Dec 10 14:05:31 2019 +0000

    Allow ConfigValueGetter to be used with uint64 on 32 bits systems
    
    Change-Id: I5d19c97c6900cea6476e85afd4cfe9885f6c8fa0
    Reviewed-on: https://gerrit.libreoffice.org/83513
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
    Tested-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/wsd/LOOLWSD.hpp b/wsd/LOOLWSD.hpp
index 333a6afc1..6e35bd796 100644
--- a/wsd/LOOLWSD.hpp
+++ b/wsd/LOOLWSD.hpp
@@ -234,7 +234,7 @@ private:
 
         void operator()(int& value) { value = _config.getInt(_name); }
         void operator()(unsigned int& value) { value = _config.getUInt(_name); }
-        void operator()(unsigned long& value) { value = _config.getUInt64(_name); }
+        void operator()(uint64_t& value) { value = _config.getUInt64(_name); }
         void operator()(bool& value) { value = _config.getBool(_name); }
         void operator()(std::string& value) { value = _config.getString(_name); }
         void operator()(double& value) { value = _config.getDouble(_name); }
commit ae832d310e6a825dc4435abba252ce0a1a1e5404
Author:     Corentin Noël <corentin.noel at collabora.com>
AuthorDate: Fri Nov 22 15:09:16 2019 +0100
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Tue Dec 10 14:05:25 2019 +0000

    WebSocketHandler: allow to build on 32bits systems
    
    Change-Id: Id51df359d9c985e72e9186433ce5dcf98e4199a4
    Reviewed-on: https://gerrit.libreoffice.org/83492
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
    Tested-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/net/WebSocketHandler.hpp b/net/WebSocketHandler.hpp
index f37d459a2..1d24fa26a 100644
--- a/net/WebSocketHandler.hpp
+++ b/net/WebSocketHandler.hpp
@@ -524,7 +524,7 @@ private:
     /// Returns the number of bytes written (including frame overhead) on success,
     /// 0 for closed/invalid socket, and -1 for other errors.
     int sendFrame(const std::shared_ptr<StreamSocket>& socket,
-                  const char* data, const size_t len,
+                  const char* data, const uint64_t len,
                   unsigned char flags, const bool flush = true) const
     {
         if (!socket || data == nullptr || len == 0)


More information about the Libreoffice-commits mailing list