Store version of configuration in the configuration.
[Sone.git] / src / main / java / net / pterodactylus / sone / core / Core.java
index 807b1f3..493221b 100644 (file)
@@ -86,6 +86,9 @@ public class Core implements IdentityListener {
        /** The configuration. */
        private Configuration configuration;
 
+       /** Whether we’re currently saving the configuration. */
+       private boolean storingConfiguration = false;
+
        /** The identity manager. */
        private final IdentityManager identityManager;
 
@@ -1416,9 +1419,18 @@ public class Core implements IdentityListener {
        /**
         * Saves the current options.
         */
-       public synchronized void saveConfiguration() {
+       public void saveConfiguration() {
+               synchronized (configuration) {
+                       if (storingConfiguration) {
+                               logger.log(Level.FINE, "Already storing configuration…");
+                               return;
+                       }
+                       storingConfiguration = true;
+               }
+
                /* store the options first. */
                try {
+                       configuration.getIntValue("Option/ConfigurationVersion").setValue(0);
                        configuration.getIntValue("Option/InsertionDelay").setValue(options.getIntegerOption("InsertionDelay").getReal());
                        configuration.getBooleanValue("Option/SoneRescueMode").setValue(options.getBooleanOption("SoneRescueMode").getReal());
                        configuration.getBooleanValue("Option/ClearOnNextRestart").setValue(options.getBooleanOption("ClearOnNextRestart").getReal());
@@ -1456,6 +1468,10 @@ public class Core implements IdentityListener {
 
                } catch (ConfigurationException ce1) {
                        logger.log(Level.SEVERE, "Could not store configuration!", ce1);
+               } finally {
+                       synchronized (configuration) {
+                               storingConfiguration = false;
+                       }
                }
        }