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

login
register
mail settings
Submitter phabricator
Date Jan. 18, 2020, 9:18 p.m.
Message ID <differential-rev-PHID-DREV-7hmj76jczwrwj3fo7yui-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/44524/
State Superseded
Headers show

Comments

phabricator - Jan. 18, 2020, 9:18 p.m.
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




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

Patch

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