diff --git a/src/org/openstreetmap/josm/data/osm/DataSet.java b/src/org/openstreetmap/josm/data/osm/DataSet.java
index 4d24417..ae31a3a 100644
|
a
|
b
|
public final class DataSet implements Data, Cloneable, ProjectionChangeListener
|
| 1160 | 1160 | public void endUpdate() { |
| 1161 | 1161 | if (updateCount > 0) { |
| 1162 | 1162 | updateCount--; |
| | 1163 | List<AbstractDatasetChangedEvent> eventsToFire = Collections.emptyList(); |
| 1163 | 1164 | if (updateCount == 0) { |
| 1164 | | List<AbstractDatasetChangedEvent> eventsCopy = new ArrayList<>(cachedEvents); |
| | 1165 | eventsToFire = new ArrayList<>(cachedEvents); |
| 1165 | 1166 | cachedEvents.clear(); |
| 1166 | | lock.writeLock().unlock(); |
| | 1167 | } |
| 1167 | 1168 | |
| 1168 | | if (!eventsCopy.isEmpty()) { |
| 1169 | | lock.readLock().lock(); |
| 1170 | | try { |
| 1171 | | if (eventsCopy.size() < MAX_SINGLE_EVENTS) { |
| 1172 | | for (AbstractDatasetChangedEvent event: eventsCopy) { |
| 1173 | | fireEventToListeners(event); |
| 1174 | | } |
| 1175 | | } else if (eventsCopy.size() == MAX_EVENTS) { |
| 1176 | | fireEventToListeners(new DataChangedEvent(this)); |
| 1177 | | } else { |
| 1178 | | fireEventToListeners(new DataChangedEvent(this, eventsCopy)); |
| | 1169 | if (!eventsToFire.isEmpty()) { |
| | 1170 | lock.readLock().lock(); |
| | 1171 | lock.writeLock().unlock(); |
| | 1172 | try { |
| | 1173 | if (eventsToFire.size() < MAX_SINGLE_EVENTS) { |
| | 1174 | for (AbstractDatasetChangedEvent event: eventsToFire) { |
| | 1175 | fireEventToListeners(event); |
| 1179 | 1176 | } |
| 1180 | | } finally { |
| 1181 | | lock.readLock().unlock(); |
| | 1177 | } else if (eventsToFire.size() == MAX_EVENTS) { |
| | 1178 | fireEventToListeners(new DataChangedEvent(this)); |
| | 1179 | } else { |
| | 1180 | fireEventToListeners(new DataChangedEvent(this, eventsToFire)); |
| 1182 | 1181 | } |
| | 1182 | } finally { |
| | 1183 | lock.readLock().unlock(); |
| 1183 | 1184 | } |
| 1184 | 1185 | } else { |
| 1185 | 1186 | lock.writeLock().unlock(); |