Ignore:
Timestamp:
2007-12-29T17:19:47+01:00 (16 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.