Revision 546c5100 lib/locking.py
b/lib/locking.py | ||
---|---|---|
97 | 97 |
""" |
98 | 98 |
__slots__ = [ |
99 | 99 |
"_fd", |
100 |
"_poller", |
|
101 | 100 |
] |
102 | 101 |
|
103 |
def __init__(self, poller, fd):
|
|
102 |
def __init__(self, fd): |
|
104 | 103 |
"""Constructor for _SingleNotifyPipeConditionWaiter |
105 | 104 |
|
106 |
@type poller: select.poll |
|
107 |
@param poller: Poller object |
|
108 | 105 |
@type fd: int |
109 | 106 |
@param fd: File descriptor to wait for |
110 | 107 |
|
111 | 108 |
""" |
112 | 109 |
object.__init__(self) |
113 |
self._poller = poller |
|
114 | 110 |
self._fd = fd |
115 | 111 |
|
116 | 112 |
def __call__(self, timeout): |
... | ... | |
121 | 117 |
|
122 | 118 |
""" |
123 | 119 |
running_timeout = utils.RunningTimeout(timeout, True) |
120 |
poller = select.poll() |
|
121 |
poller.register(self._fd, select.POLLHUP) |
|
124 | 122 |
|
125 | 123 |
while True: |
126 | 124 |
remaining_time = running_timeout.Remaining() |
... | ... | |
133 | 131 |
remaining_time *= 1000 |
134 | 132 |
|
135 | 133 |
try: |
136 |
result = self._poller.poll(remaining_time)
|
|
134 |
result = poller.poll(remaining_time) |
|
137 | 135 |
except EnvironmentError, err: |
138 | 136 |
if err.errno != errno.EINTR: |
139 | 137 |
raise |
... | ... | |
222 | 220 |
""" |
223 | 221 |
|
224 | 222 |
__slots__ = [ |
225 |
"_poller", |
|
226 | 223 |
"_read_fd", |
227 | 224 |
"_write_fd", |
228 | 225 |
"_nwaiters", |
... | ... | |
240 | 237 |
self._notified = False |
241 | 238 |
self._read_fd = None |
242 | 239 |
self._write_fd = None |
243 |
self._poller = None |
|
244 | 240 |
|
245 | 241 |
def _check_unnotified(self): |
246 | 242 |
"""Throws an exception if already notified. |
... | ... | |
260 | 256 |
if self._write_fd is not None: |
261 | 257 |
os.close(self._write_fd) |
262 | 258 |
self._write_fd = None |
263 |
self._poller = None |
|
264 | 259 |
|
265 | 260 |
def wait(self, timeout): |
266 | 261 |
"""Wait for a notification. |
... | ... | |
274 | 269 |
|
275 | 270 |
self._nwaiters += 1 |
276 | 271 |
try: |
277 |
if self._poller is None:
|
|
272 |
if self._read_fd is None:
|
|
278 | 273 |
(self._read_fd, self._write_fd) = os.pipe() |
279 |
self._poller = select.poll() |
|
280 |
self._poller.register(self._read_fd, select.POLLHUP) |
|
281 | 274 |
|
282 |
wait_fn = self._waiter_class(self._poller, self._read_fd)
|
|
275 |
wait_fn = self._waiter_class(self._read_fd) |
|
283 | 276 |
state = self._release_save() |
284 | 277 |
try: |
285 | 278 |
# Wait for notification |
Also available in: Unified diff