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
--- 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()