##// END OF EJS Templates
lock.py: cache hostname, but not pid, in case we fork
Bryan O'Sullivan -
r4947:3e25a6eb default
parent child Browse files
Show More
@@ -29,14 +29,13 b' class lock(object):'
29 29 # old-style lock: symlink to pid
30 30 # new-style lock: symlink to hostname:pid
31 31
32 _host = None
33
32 34 def __init__(self, file, timeout=-1, releasefn=None, desc=None):
33 35 self.f = file
34 36 self.held = 0
35 37 self.timeout = timeout
36 38 self.releasefn = releasefn
37 self.id = None
38 self.host = None
39 self.pid = None
40 39 self.desc = desc
41 40 self.lock()
42 41
@@ -59,13 +58,12 b' class lock(object):'
59 58 inst.locker)
60 59
61 60 def trylock(self):
62 if self.id is None:
63 self.host = socket.gethostname()
64 self.pid = os.getpid()
65 self.id = '%s:%s' % (self.host, self.pid)
61 if lock._host is None:
62 lock._host = socket.gethostname()
63 lockname = lock._host + ':' + str(os.getpid())
66 64 while not self.held:
67 65 try:
68 util.makelock(self.id, self.f)
66 util.makelock(lockname, self.f)
69 67 self.held = 1
70 68 except (OSError, IOError), why:
71 69 if why.errno == errno.EEXIST:
@@ -93,7 +91,7 b' class lock(object):'
93 91 host, pid = locker.split(":", 1)
94 92 except ValueError:
95 93 return locker
96 if host != self.host:
94 if host != lock._host:
97 95 return locker
98 96 try:
99 97 pid = int(pid)
General Comments 0
You need to be logged in to leave comments. Login now