Dolda2000 GitWeb
/
ashd.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
107712e
)
python: Added a global wsgidir module attribute to indicate currentness.
author
Fredrik Tolf
<fredrik@dolda2000.com>
Sat, 17 May 2014 02:05:30 +0000
(
04:05
+0200)
committer
Fredrik Tolf
<fredrik@dolda2000.com>
Sat, 17 May 2014 02:05:30 +0000
(
04:05
+0200)
python3/ashd/wsgidir.py
patch
|
blob
|
blame
|
history
diff --git
a/python3/ashd/wsgidir.py
b/python3/ashd/wsgidir.py
index
c6fa1ad
..
9fc3649
100644
(file)
--- a/
python3/ashd/wsgidir.py
+++ b/
python3/ashd/wsgidir.py
@@
-58,6
+58,20
@@
class cachedmod(object):
self.mod = mod
self.mtime = mtime
self.mod = mod
self.mtime = mtime
+class current(object):
+ def __init__(self):
+ self.cond = threading.Condition()
+ self.current = True
+ def wait(self, timeout=None):
+ with self.cond:
+ self.cond.wait(timeout)
+ def uncurrent(self):
+ with self.cond:
+ self.current = False
+ self.cond.notify_all()
+ def __bool__(self):
+ return self.current
+
modcache = {}
cachelock = threading.Lock()
modcache = {}
cachelock = threading.Lock()
@@
-97,8
+111,16
@@
def getmod(path):
code = compile(text, path, "exec")
mod = types.ModuleType(mangle(path))
mod.__file__ = path
code = compile(text, path, "exec")
mod = types.ModuleType(mangle(path))
mod.__file__ = path
- exec(code, mod.__dict__)
- entry[1] = cachedmod(mod, sb.st_mtime)
+ mod.__current__ = current()
+ try:
+ exec(code, mod.__dict__)
+ except:
+ mod.__current__.uncurrent()
+ raise
+ else:
+ if entry[1] is not None:
+ entry[1].mod.__current__.uncurrent()
+ entry[1] = cachedmod(mod, sb.st_mtime)
return entry[1]
def importlocal(filename):
return entry[1]
def importlocal(filename):