add locks to config and storage
authorThomasV <thomasv@gitorious>
Sun, 29 Sep 2013 16:33:54 +0000 (18:33 +0200)
committerThomasV <thomasv@gitorious>
Sun, 29 Sep 2013 16:33:54 +0000 (18:33 +0200)
lib/simple_config.py
lib/wallet.py

index 62d5118..5483311 100644 (file)
@@ -1,11 +1,9 @@
-import json, ast
-import os, ast
-from util import user_dir, print_error
-
-from version import ELECTRUM_VERSION, SEED_VERSION
-
-
+import json
+import ast
+import threading
+import os
 
+from util import user_dir, print_error
 
 
 
@@ -17,6 +15,7 @@ user configurations from electrum.conf into separate dictionaries within
 a SimpleConfig instance then reads the wallet file.
 """
     def __init__(self, options={}):
+        self.lock = threading.Lock()
 
         # system conf, readonly
         self.system_config = {}
@@ -65,8 +64,11 @@ a SimpleConfig instance then reads the wallet file.
                 print "Warning: not changing '%s' because it was set in the system configuration"%key
 
         else:
-            self.user_config[key] = value
-            if save: self.save_user_config()
+
+            with self.lock:
+                self.user_config[key] = value
+                if save: 
+                    self.save_user_config()
 
 
 
index 868d383..953502a 100644 (file)
@@ -68,6 +68,7 @@ from version import ELECTRUM_VERSION, SEED_VERSION
 class WalletStorage:
 
     def __init__(self, config):
+        self.lock = threading.Lock()
         self.data = {}
         self.file_exists = False
         self.init_path(config)
@@ -110,15 +111,13 @@ class WalletStorage:
 
     def put(self, key, value, save = True):
 
-        if self.data.get(key) is not None:
-            self.data[key] = value
-        else:
-            # add key to wallet config
-            self.data[key] = value
-
-        if save: 
-            self.write()
-
+        with self.lock:
+            if value is not None:
+                self.data[key] = value
+            else:
+                self.data.pop[key]
+            if save: 
+                self.write()
 
     def write(self):
         s = repr(self.data)