D7949: py3: suppress unraisable exceptions in test-worker.t

indygreg (Gregory Szorc) phabricator at mercurial-scm.org
Sat Jan 18 21:18:58 UTC 2020


indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  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.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D7949

AFFECTED FILES
  tests/test-worker.t

CHANGE DETAILS

diff --git a/tests/test-worker.t b/tests/test-worker.t
--- a/tests/test-worker.t
+++ b/tests/test-worker.t
@@ -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()



To: indygreg, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list