equal
deleted
inserted
replaced
49 self.desc = desc |
49 self.desc = desc |
50 self.parentlock = parentlock |
50 self.parentlock = parentlock |
51 self._parentheld = False |
51 self._parentheld = False |
52 self._inherited = False |
52 self._inherited = False |
53 self.postrelease = [] |
53 self.postrelease = [] |
54 self.pid = os.getpid() |
54 self.pid = self._getpid() |
55 self.delay = self.lock() |
55 self.delay = self.lock() |
56 if self.acquirefn: |
56 if self.acquirefn: |
57 self.acquirefn() |
57 self.acquirefn() |
58 |
58 |
59 def __del__(self): |
59 def __del__(self): |
65 # ensure the lock will be removed |
65 # ensure the lock will be removed |
66 # even if recursive locking did occur |
66 # even if recursive locking did occur |
67 self.held = 1 |
67 self.held = 1 |
68 |
68 |
69 self.release() |
69 self.release() |
|
70 |
|
71 def _getpid(self): |
|
72 # wrapper around os.getpid() to make testing easier |
|
73 return os.getpid() |
70 |
74 |
71 def lock(self): |
75 def lock(self): |
72 timeout = self.timeout |
76 timeout = self.timeout |
73 while True: |
77 while True: |
74 try: |
78 try: |
195 delayed to the last release call.""" |
199 delayed to the last release call.""" |
196 if self.held > 1: |
200 if self.held > 1: |
197 self.held -= 1 |
201 self.held -= 1 |
198 elif self.held == 1: |
202 elif self.held == 1: |
199 self.held = 0 |
203 self.held = 0 |
200 if os.getpid() != self.pid: |
204 if self._getpid() != self.pid: |
201 # we forked, and are not the parent |
205 # we forked, and are not the parent |
202 return |
206 return |
203 try: |
207 try: |
204 if self.releasefn: |
208 if self.releasefn: |
205 self.releasefn() |
209 self.releasefn() |