(self)
| 195 | |
| 196 | @threading_helper.reap_threads |
| 197 | def test_threaded_poll(self): |
| 198 | r, w = os.pipe() |
| 199 | self.addCleanup(os.close, r) |
| 200 | self.addCleanup(os.close, w) |
| 201 | rfds = [] |
| 202 | for i in range(10): |
| 203 | fd = os.dup(r) |
| 204 | self.addCleanup(os.close, fd) |
| 205 | rfds.append(fd) |
| 206 | pollster = select.poll() |
| 207 | for fd in rfds: |
| 208 | pollster.register(fd, select.POLLIN) |
| 209 | |
| 210 | t = threading.Thread(target=pollster.poll) |
| 211 | t.start() |
| 212 | try: |
| 213 | time.sleep(0.5) |
| 214 | # trigger ufds array reallocation |
| 215 | for fd in rfds: |
| 216 | pollster.unregister(fd) |
| 217 | pollster.register(w, select.POLLOUT) |
| 218 | self.assertRaises(RuntimeError, pollster.poll) |
| 219 | finally: |
| 220 | # and make the call to poll() from the thread return |
| 221 | os.write(w, b'spam') |
| 222 | t.join() |
| 223 | |
| 224 | @unittest.skipUnless(threading, 'Threading required for this test.') |
| 225 | @threading_helper.reap_threads |
nothing calls this directly
no test coverage detected