Changeset 12100 in josm for trunk/src/org/openstreetmap/josm


Ignore:
Timestamp:
2017-05-10T23:15:07+02:00 (3 years ago)
Author:
michael2402
Message:

See #14765: Use a try-lock for map painting code: Don't freeze JOSM if layer is locked too long.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java

    r12078 r12100  
    3535import java.util.Optional;
    3636import java.util.concurrent.ForkJoinPool;
     37import java.util.concurrent.TimeUnit;
    3738import java.util.function.BiConsumer;
    3839import java.util.function.Consumer;
     
    8081import org.openstreetmap.josm.tools.ImageProvider;
    8182import org.openstreetmap.josm.tools.JosmRuntimeException;
     83import org.openstreetmap.josm.tools.Logging;
    8284import org.openstreetmap.josm.tools.Utils;
    8385import org.openstreetmap.josm.tools.bugreport.BugReport;
     
    15291531        getSettings(renderVirtualNodes);
    15301532
    1531         data.getReadLock().lock();
     1533        try {
     1534            if (data.getReadLock().tryLock(1, TimeUnit.SECONDS)) {
     1535                try {
     1536                    paintWithLock(data, renderVirtualNodes, benchmark, bbox);
     1537                } finally {
     1538                    data.getReadLock().unlock();
     1539                }
     1540            } else {
     1541                Logging.warn("Cannot paint layer {0}: It is locked.");
     1542            }
     1543        } catch (InterruptedException e) {
     1544            Logging.warn("Cannot paint layer {0}: Interrupted");
     1545        }
     1546    }
     1547
     1548    private void paintWithLock(final DataSet data, boolean renderVirtualNodes, RenderBenchmarkCollector benchmark,
     1549            BBox bbox) {
    15321550        try {
    15331551            highlightWaySegments = data.getHighlightedWaySegments();
     
    15751593                    .put("paintSettings", paintSettings)
    15761594                    .put("renderVirtualNodes", renderVirtualNodes);
    1577         } finally {
    1578             data.getReadLock().unlock();
    15791595        }
    15801596    }
Note: See TracChangeset for help on using the changeset viewer.