• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import os
2import runpy
3import shlex
4import signal
5import sys
6
7# Some tests use SIGUSR1, but that's blocked by default in an Android app in
8# order to make it available to `sigwait` in the Signal Catcher thread.
9# (https://cs.android.com/android/platform/superproject/+/android14-qpr3-release:art/runtime/signal_catcher.cc).
10# That thread's functionality is only useful for debugging the JVM, so disabling
11# it should not weaken the tests.
12#
13# There's no safe way of stopping the thread completely (#123982), but simply
14# unblocking SIGUSR1 is enough to fix most tests.
15#
16# However, in tests that generate multiple different signals in quick
17# succession, it's possible for SIGUSR1 to arrive while the main thread is busy
18# running the C-level handler for a different signal. In that case, the SIGUSR1
19# may be sent to the Signal Catcher thread instead, which will generate a log
20# message containing the text "reacting to signal".
21#
22# Such tests may need to be changed in one of the following ways:
23#   * Use a signal other than SIGUSR1 (e.g. test_stress_delivery_simultaneous in
24#     test_signal.py).
25#   * Send the signal to a specific thread rather than the whole process (e.g.
26#     test_signals in test_threadsignals.py.
27signal.pthread_sigmask(signal.SIG_UNBLOCK, [signal.SIGUSR1])
28
29sys.argv[1:] = shlex.split(os.environ["PYTHON_ARGS"])
30
31# The test module will call sys.exit to indicate whether the tests passed.
32runpy.run_module("test")
33