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(); |