equal
deleted
inserted
replaced
33 self.f = file |
33 self.f = file |
34 self.held = 0 |
34 self.held = 0 |
35 self.timeout = timeout |
35 self.timeout = timeout |
36 self.releasefn = releasefn |
36 self.releasefn = releasefn |
37 self.desc = desc |
37 self.desc = desc |
|
38 self.postreleasehooks = [] |
38 self.lock() |
39 self.lock() |
39 |
40 |
40 def __del__(self): |
41 def __del__(self): |
41 if self.held: |
42 if self.held: |
42 warnings.warn("use lock.release instead of del lock", |
43 warnings.warn("use lock.release instead of del lock", |
117 l.release() |
118 l.release() |
118 except error.LockError: |
119 except error.LockError: |
119 return locker |
120 return locker |
120 |
121 |
121 def release(self): |
122 def release(self): |
|
123 """release the lock and execute callback function if any |
|
124 |
|
125 If the lock have been aquired multiple time, the actual release is |
|
126 delayed to the last relase call.""" |
122 if self.held > 1: |
127 if self.held > 1: |
123 self.held -= 1 |
128 self.held -= 1 |
124 elif self.held == 1: |
129 elif self.held == 1: |
125 self.held = 0 |
130 self.held = 0 |
126 if self.releasefn: |
131 if self.releasefn: |
127 self.releasefn() |
132 self.releasefn() |
128 try: |
133 try: |
129 util.unlink(self.f) |
134 util.unlink(self.f) |
130 except OSError: |
135 except OSError: |
131 pass |
136 pass |
|
137 for callback in self.postreleasehooks: |
|
138 callback() |
132 |
139 |
133 def release(*locks): |
140 def release(*locks): |
134 for lock in locks: |
141 for lock in locks: |
135 if lock is not None: |
142 if lock is not None: |
136 lock.release() |
143 lock.release() |