mirror of https://github.com/python/cpython
bpo-40280: Detect if WASM platform supports threading (GH-32243)
Automerge-Triggered-By: GH:tiran
This commit is contained in:
parent
7000cd7016
commit
59be9cd748
|
@ -11,6 +11,7 @@ import unittest
|
||||||
|
|
||||||
from test import support
|
from test import support
|
||||||
from test.support import os_helper
|
from test.support import os_helper
|
||||||
|
from test.support import threading_helper
|
||||||
from test.libregrtest.cmdline import Namespace
|
from test.libregrtest.cmdline import Namespace
|
||||||
from test.libregrtest.save_env import saved_test_environment
|
from test.libregrtest.save_env import saved_test_environment
|
||||||
from test.libregrtest.utils import clear_caches, format_duration, print_warning
|
from test.libregrtest.utils import clear_caches, format_duration, print_warning
|
||||||
|
@ -179,7 +180,9 @@ def _runtest(ns: Namespace, test_name: str) -> TestResult:
|
||||||
|
|
||||||
output_on_failure = ns.verbose3
|
output_on_failure = ns.verbose3
|
||||||
|
|
||||||
use_timeout = (ns.timeout is not None)
|
use_timeout = (
|
||||||
|
ns.timeout is not None and threading_helper.can_start_thread
|
||||||
|
)
|
||||||
if use_timeout:
|
if use_timeout:
|
||||||
faulthandler.dump_traceback_later(ns.timeout, exit=True)
|
faulthandler.dump_traceback_later(ns.timeout, exit=True)
|
||||||
|
|
||||||
|
|
|
@ -207,3 +207,30 @@ class catch_threading_exception:
|
||||||
del self.exc_value
|
del self.exc_value
|
||||||
del self.exc_traceback
|
del self.exc_traceback
|
||||||
del self.thread
|
del self.thread
|
||||||
|
|
||||||
|
|
||||||
|
def _can_start_thread() -> bool:
|
||||||
|
"""Detect if Python can start new threads.
|
||||||
|
|
||||||
|
Some WebAssembly platforms do not provide a working pthread
|
||||||
|
implementation. Thread support is stubbed and any attempt
|
||||||
|
to create a new thread fails.
|
||||||
|
|
||||||
|
- wasm32-wasi does not have threading.
|
||||||
|
- wasm32-emscripten can be compiled with or without pthread
|
||||||
|
support (-s USE_PTHREADS / __EMSCRIPTEN_PTHREADS__).
|
||||||
|
"""
|
||||||
|
if sys.platform == "emscripten":
|
||||||
|
try:
|
||||||
|
_thread.start_new_thread(lambda: None, ())
|
||||||
|
except RuntimeError:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
elif sys.platform == "wasi":
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
# assume all other platforms have working thread support.
|
||||||
|
return True
|
||||||
|
|
||||||
|
can_start_thread = _can_start_thread()
|
||||||
|
|
Loading…
Reference in New Issue