Vinay Sajip <vinay_sa...@yahoo.co.uk> added the comment: [snip] >With this change, I can trigger a failure reliably in around 1s, and >my computer is rather slow.
I'm working in a VM, and although I can get John's script to fail more regularly (with the reduced timeouts and counts of 1000), a version of the test which I added to test_logging always succeeds. That code is: @unittest.skipUnless(threading, 'Threading required for this test.') def test_race(self): # Issue #14632 refers. def remove_loop(fname, tries): for _ in range(tries): try: os.unlink(fname) except OSError: pass time.sleep(0.004 * random.randint(0, 4)) def cleanup(remover, fn, handler): handler.close() remover.join() if os.path.exists(fn): os.unlink(fn) fd, fn = tempfile.mkstemp('.log', 'test_logging-3-') os.close(fd) del_count = 1000 log_count = 1000 remover = threading.Thread(target=remove_loop, args=(fn, del_count)) remover.daemon = True remover.start() h = logging.handlers.WatchedFileHandler(fn) self.addCleanup(cleanup, remover, fn, h) f = logging.Formatter('%(asctime)s: %(levelname)s: %(message)s') h.setFormatter(f) for _ in range(log_count): time.sleep(0.005) r = logging.makeLogRecord({'msg': 'testing' }) h.handle(r) I can't see why this always works, while John's script sometimes fails. >The problem is that it would leave a race window if the file is >changed between the time it's opened (I guess in >logging.FileHandler.__init__()) and the first call to stat(). >John's patch is safe in this regard, thanks to fstat(). Oh, right - missed that. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue14632> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com