Ignore:
Timestamp:
2020-10-19T15:25:47+02:00 (4 years ago)
Author:
GerdP
Message:

see #19885: memory leak with "temporary" objects in validator and actions

  • replace ChangeCommand by ChangePropertyCommand to avoid cloning primitives
  • also move the call of super.endTest() to the end of the method endTest(), else reported timings make not much sense
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java

    r16793 r17243  
    1818import java.util.stream.Collectors;
    1919
    20 import org.openstreetmap.josm.command.ChangeCommand;
     20import org.openstreetmap.josm.command.ChangeMembersCommand;
    2121import org.openstreetmap.josm.command.Command;
    2222import org.openstreetmap.josm.command.DeleteCommand;
     
    386386            if (testError.getCode() == RELATION_LOOP) {
    387387                Relation old = (Relation) primitives.iterator().next();
    388                 Relation mod = new Relation(old);
    389                 mod.removeMembersFor(primitives);
    390                 return new ChangeCommand(old, mod);
     388                List<RelationMember> remaining = new ArrayList<>(old.getMembers());
     389                remaining.removeIf(rm -> primitives.contains(rm.getMember()));
     390                return new ChangeMembersCommand(old, Utils.toUnmodifiableList(remaining));
    391391            }
    392392        }
Note: See TracChangeset for help on using the changeset viewer.