From 6fedc7169ec094358e92872aaee5d444cd329afb Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Thu, 24 Nov 2011 01:32:10 -0600 Subject: [PATCH] Reduce unneeded multiple saves for persistent marker updates --- .../dynmap/markers/impl/MarkerAPIImpl.java | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/dynmap/markers/impl/MarkerAPIImpl.java b/src/main/java/org/dynmap/markers/impl/MarkerAPIImpl.java index 5f46857a..22069050 100644 --- a/src/main/java/org/dynmap/markers/impl/MarkerAPIImpl.java +++ b/src/main/java/org/dynmap/markers/impl/MarkerAPIImpl.java @@ -158,17 +158,24 @@ public class MarkerAPIImpl implements MarkerAPI, Event.Listener { private boolean stop = false; private Set dirty_worlds = new HashSet(); + private boolean dirty_markers = false; private class DoFileWrites implements Runnable { public void run() { if(stop) return; - - for(String world : dirty_worlds) { - writeMarkersFile(world); + /* Write markers first - drives JSON updates too */ + if(dirty_markers) { + doSaveMarkers(); + dirty_markers = false; + } + /* Process any dirty worlds */ + if(!dirty_worlds.isEmpty()) { + for(String world : dirty_worlds) { + writeMarkersFile(world); + } + dirty_worlds.clear(); } - dirty_worlds.clear(); - server.getScheduler().scheduleSyncDelayedTask(dynmap, this, 20); } } @@ -237,6 +244,11 @@ public class MarkerAPIImpl implements MarkerAPI, Event.Listener { plugin.events.removeListener("worldactivated", api); stop = true; + if(dirty_markers) { + doSaveMarkers(); + dirty_markers = false; + } + for(MarkerIconImpl icn : markericons.values()) icn.cleanup(); markericons.clear(); @@ -375,6 +387,11 @@ public class MarkerAPIImpl implements MarkerAPI, Event.Listener { * Save persistence for markers */ static void saveMarkers() { + if(api != null) { + api.dirty_markers = true; + } + } + private void doSaveMarkers() { if(api != null) { Configuration conf = new Configuration(api.markerpersist); /* Make configuration object */ /* First, save icon definitions */