Ticket #13046: patch-mapview-leak-memory-when-layer-removed-during-addition.patch

File patch-mapview-leak-memory-when-layer-removed-during-addition.patch, 2.0 KB (added by michael2402, 9 years ago)
  • src/org/openstreetmap/josm/gui/MapView.java

    diff --git a/src/org/openstreetmap/josm/gui/MapView.java b/src/org/openstreetmap/josm/gui/MapView.java
    index 4804363..f505f90 100644
    a b LayerManager.LayerChangeListener, MainLayerManager.ActiveLayerChangeListener {  
    631631            Layer layer = e.getAddedLayer();
    632632            registeredLayers.put(layer, new WarningLayerPainter(layer));
    633633            // Layers may trigger a redraw during this call if they open dialogs.
    634             registeredLayers.put(layer, layer.attachToMapView(new MapViewEvent(this, false)));
     634            LayerPainter painter = layer.attachToMapView(new MapViewEvent(this, false));
     635            if (!registeredLayers.containsKey(layer)) {
     636                // The layer may have removed itself during attachToMapView()
     637                Main.warn("Layer was removed during attachToMapView()");
     638            } else {
     639                registeredLayers.put(layer, painter);
    635640
    636             ProjectionBounds viewProjectionBounds = layer.getViewProjectionBounds();
    637             if (viewProjectionBounds != null) {
    638                 scheduleZoomTo(new ViewportData(viewProjectionBounds));
    639             }
     641                ProjectionBounds viewProjectionBounds = layer.getViewProjectionBounds();
     642                if (viewProjectionBounds != null) {
     643                    scheduleZoomTo(new ViewportData(viewProjectionBounds));
     644                }
    640645
    641             layer.addPropertyChangeListener(this);
    642             Main.addProjectionChangeListener(layer);
    643             invalidatedListener.addTo(layer);
    644             AudioPlayer.reset();
     646                layer.addPropertyChangeListener(this);
     647                Main.addProjectionChangeListener(layer);
     648                invalidatedListener.addTo(layer);
     649                AudioPlayer.reset();
    645650
    646             repaint();
     651                repaint();
     652            }
    647653        } catch (RuntimeException t) {
    648654            throw BugReport.intercept(t).put("layer", e.getAddedLayer());
    649655        }