Fix race condition when removing canvas before it has rendered (#6033)
Fixes #6030: Cancel animation frame request before removing the map. This fixes the bug where the the delayed call to _redraw is trying to get the drawing context which has already been destroyed.
This commit is contained in:
parent
c3a6a5b60a
commit
3e8e76c790
@ -190,3 +190,49 @@ describe('Canvas', function () {
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('Canvas remove', function () {
|
||||
|
||||
var c;
|
||||
|
||||
before(function () {
|
||||
c = document.createElement('div');
|
||||
c.style.width = '400px';
|
||||
c.style.height = '400px';
|
||||
c.style.position = 'absolute';
|
||||
c.style.top = '0';
|
||||
c.style.left = '0';
|
||||
document.body.appendChild(c);
|
||||
});
|
||||
|
||||
after(function () {
|
||||
document.body.removeChild(c);
|
||||
});
|
||||
|
||||
function createCanvasMap(c, options) {
|
||||
var map = new L.Map(c, options);
|
||||
map.setView([0, 0], 6);
|
||||
var p2ll = function (x, y) {
|
||||
return map.layerPointToLatLng([x, y]);
|
||||
};
|
||||
var latLngs = [p2ll(0, 0), p2ll(0, 100), p2ll(100, 100), p2ll(100, 0)];
|
||||
var layer = L.polygon(latLngs).addTo(map);
|
||||
return map;
|
||||
}
|
||||
|
||||
it("can remove the map without errors", function (done) {
|
||||
var map1 = createCanvasMap(c, {preferCanvas: true, zoomControl: false});
|
||||
map1.remove();
|
||||
L.Util.requestAnimFrame(function () { done(); });
|
||||
});
|
||||
|
||||
it("can remove renderer without errors", function (done) {
|
||||
var canvas = L.canvas();
|
||||
var map = createCanvasMap(c, {renderer: canvas, zoomControl: false});
|
||||
canvas.remove();
|
||||
map.remove();
|
||||
L.Util.requestAnimFrame(function () { done(); });
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
@ -68,6 +68,7 @@ export var Canvas = Renderer.extend({
|
||||
},
|
||||
|
||||
_destroyContainer: function () {
|
||||
Util.cancelAnimFrame(this._redrawRequest);
|
||||
delete this._ctx;
|
||||
DomUtil.remove(this._container);
|
||||
DomEvent.off(this._container);
|
||||
|
Loading…
Reference in New Issue
Block a user