python: Fixed wsgidir caching problem.
authorFredrik Tolf <fredrik@dolda2000.com>
Tue, 13 Dec 2011 18:00:13 +0000 (19:00 +0100)
committerFredrik Tolf <fredrik@dolda2000.com>
Tue, 13 Dec 2011 18:00:13 +0000 (19:00 +0100)
python/ashd/wsgidir.py
python3/ashd/wsgidir.py

index 5711ee6..afd13f5 100644 (file)
@@ -87,13 +87,13 @@ def getmod(path):
         if path in modcache:
             entry = modcache[path]
         else:
-            entry = cachedmod()
+            entry = [threading.Lock(), None]
             modcache[path] = entry
     finally:
         cachelock.release()
-    entry.lock.acquire()
+    entry[0].acquire()
     try:
-        if entry.mod is None or sb.st_mtime > entry.mtime:
+        if entry[1] is None or sb.st_mtime > entry[1].mtime:
             f = open(path, "r")
             try:
                 text = f.read()
@@ -103,11 +103,10 @@ def getmod(path):
             mod = types.ModuleType(mangle(path))
             mod.__file__ = path
             exec code in mod.__dict__
-            entry.mod = mod
-            entry.mtime = sb.st_mtime
-        return entry
+            entry[1] = cachedmod(mod, sb.st_mtime)
+        return entry[1]
     finally:
-        entry.lock.release()
+        entry[0].release()
 
 class handler(object):
     def __init__(self):
index 4603cc2..4b1e4f0 100644 (file)
@@ -86,19 +86,18 @@ def getmod(path):
         if path in modcache:
             entry = modcache[path]
         else:
-            entry = cachedmod()
+            entry = [threading.Lock(), None]
             modcache[path] = entry
-    with entry.lock:
-        if entry.mod is None or sb.st_mtime > entry.mtime:
+    with entry[0]:
+        if entry[1] is None or sb.st_mtime > entry[1].mtime:
             with open(path, "rb") as f:
                 text = f.read()
             code = compile(text, path, "exec")
             mod = types.ModuleType(mangle(path))
             mod.__file__ = path
             exec(code, mod.__dict__)
-            entry.mod = mod
-            entry.mtime = sb.st_mtime
-        return entry
+            entry[1] = cachedmod(mod, sb.st_mtime)
+        return entry[1]
 
 class handler(object):
     def __init__(self):