diff --git a/lib/OpenLayers/TileManager.js b/lib/OpenLayers/TileManager.js index 49bdd36b5d..743f192368 100644 --- a/lib/OpenLayers/TileManager.js +++ b/lib/OpenLayers/TileManager.js @@ -330,6 +330,9 @@ OpenLayers.TileManager = OpenLayers.Class({ // only use image from cache if it is not on a layer already if (img && (!img.parentNode || OpenLayers.Element.hasClass(img.parentNode, 'olBackBuffer'))) { + if (tile.imgDiv) { + tile.layer.div.removeChild(tile.imgDiv); + } tile.imgDiv = img; OpenLayers.Util.removeItem(this.tileCacheIndex, tile.url); this.tileCacheIndex.push(tile.url); diff --git a/tests/TileManager.html b/tests/TileManager.html index 802640e1f9..703c1a05f4 100644 --- a/tests/TileManager.html +++ b/tests/TileManager.html @@ -42,7 +42,7 @@ } function test_manageTileCache(t) { - t.plan(9); + t.plan(10); var tileManager = new OpenLayers.TileManager({ cacheSize: 12 @@ -51,6 +51,7 @@ layer = new OpenLayers.Layer.WMS('WMS', '../img/blank.gif'); map.addLayer(layer); map.setCenter([16, 48], 9); + var gridSize; var firstInCache, sharedTile; t.delay_call(2, function() { @@ -59,6 +60,7 @@ t.ok(tileManager.tileCache[layer.grid[1][2].url] === layer.grid[1][2].imgDiv, "correct object cached"); firstInCache = tileManager.tileCache[tileManager.tileCacheIndex[0]]; sharedTile = tileManager.tileCache[tileManager.tileCacheIndex[11]]; + gridSize = layer.div.childNodes.length; map.setCenter([17, 47]); }); t.delay_call(4, function() { @@ -72,6 +74,7 @@ t.delay_call(6, function() { t.ok(!(firstInCache.getAttribute("src") in tileManager.tileCache), "old tile discarded"); t.ok(sharedTile.getAttribute("src") in tileManager.tileCache, "shared tile still in cache"); + t.eq(layer.div.childNodes.length, gridSize, 'no unused images left in dom'); map.destroy(); }); }