Changeset 500 in josm


Ignore:
Timestamp:
Dec 29, 2007 5:19:47 PM (5 years ago)
Author:
gebner
Message:

Fix ConcurrentModificationException in DeleteAction.

Note: Don't EVER modify a hash table while iterating over it. Even if you
don't cause a resize (and get an exception), sometimes you will see the
modifications immediately during the iteration and sometimes not, creating
seemingly unpredictable behavior.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java

    r495 r500  
    176176                Collection<OsmPrimitive> del = new HashSet<OsmPrimitive>(selection); 
    177177                Collection<Way> waysToBeChanged = new HashSet<Way>(); 
    178                  
    179                 // nodes belonging to a way will be deleted if 
    180                 // 1. this has been requested (alt modifier) 
    181                 // 2. the node is not tagged 
    182                 // 3. the node is not used by anybody else (i.e. has only one backref) 
     178 
    183179                if (alsoDeleteNodesInWay) { 
     180                        // Delete untagged nodes that are to be unreferenced. 
     181                        Collection<OsmPrimitive> delNodes = new HashSet<OsmPrimitive>(); 
    184182                        for (OsmPrimitive osm : del) { 
    185183                                if (osm instanceof Way) { 
     
    189187                                                        n.visit(v); 
    190188                                                        if (v.data.size() == 1) { 
    191                                                                 del.add(n); 
    192                                                         } else System.out.println("size="+v.data.size()); 
     189                                                                delNodes.add(n); 
     190                                                        } 
    193191                                                } 
    194                                                 else System.out.println("tagged"); 
    195192                                        } 
    196193                                } 
    197194                        } 
     195                        del.addAll(delNodes); 
    198196                } 
    199197                 
Note: See TracChangeset for help on using the changeset viewer.