py3: suppress unraisable exceptions in test-worker.t
authorGregory Szorc <gregory.szorc@gmail.com>
Sat, 18 Jan 2020 11:13:01 -0800
changeset 44116 b5aaa09be18c
parent 44115 e1b8b4e4f496
child 44117 c5e0a9b97b8a
py3: suppress unraisable exceptions in test-worker.t Python 3.8 calls sys.unraisablehook when an unraisable exception is encountered. The default behavior is to print a warning. test-worker.t was triggering this hook due to a race between a newly forked process exiting and that process's _os.register_at_fork handlers running. I was seeing the stdlib's random module in the stack re-seeding itself. Although there could be other after-fork handlers in the mix. This commit defines sys.unraisablehook to effectively no-op. This suppresses the warning and makes test output on Python 3.8 consistent with prior versions. test-worker.t now passes on Python 3.8. Differential Revision: https://phab.mercurial-scm.org/D7949
tests/test-worker.t
--- a/tests/test-worker.t	Mon Jan 20 18:28:46 2020 -0500
+++ b/tests/test-worker.t	Sat Jan 18 11:13:01 2020 -0800
@@ -2,6 +2,7 @@
 
   $ cat > t.py <<EOF
   > from __future__ import absolute_import, print_function
+  > import sys
   > import time
   > from mercurial import (
   >     error,
@@ -9,6 +10,7 @@
   >     ui as uimod,
   >     worker,
   > )
+  > sys.unraisablehook = lambda x: None
   > def abort(ui, args):
   >     if args[0] == 0:
   >         # by first worker for test stability
@@ -101,7 +103,9 @@
   > from __future__ import absolute_import
   > import atexit
   > import os
+  > import sys
   > import time
+  > sys.unraisablehook = lambda x: None
   > oldfork = os.fork
   > count = 0
   > parentpid = os.getpid()