Skip to content

Commit 17e7aad

Browse files
[3.14] gh-141579: Fix perf_jit backend in sys.activate_stack_trampoline() (GH-141580) (#141581)
Co-authored-by: Pablo Galindo Salgado <[email protected]>
1 parent d582b6f commit 17e7aad

File tree

3 files changed

+28
-8
lines changed

3 files changed

+28
-8
lines changed

Lib/test/test_perf_profiler.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,24 @@ def test_sys_api_get_status(self):
231231
"""
232232
assert_python_ok("-c", code, PYTHON_JIT="0")
233233

234+
def test_sys_api_perf_jit_backend(self):
235+
code = """if 1:
236+
import sys
237+
sys.activate_stack_trampoline("perf_jit")
238+
assert sys.is_stack_trampoline_active() is True
239+
sys.deactivate_stack_trampoline()
240+
assert sys.is_stack_trampoline_active() is False
241+
"""
242+
assert_python_ok("-c", code, PYTHON_JIT="0")
243+
244+
def test_sys_api_with_existing_perf_jit_trampoline(self):
245+
code = """if 1:
246+
import sys
247+
sys.activate_stack_trampoline("perf_jit")
248+
sys.activate_stack_trampoline("perf_jit")
249+
"""
250+
assert_python_ok("-c", code, PYTHON_JIT="0")
251+
234252

235253
def is_unwinding_reliable_with_frame_pointers():
236254
cflags = sysconfig.get_config_var("PY_CORE_CFLAGS")
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix :func:`sys.activate_stack_trampoline` to properly support the
2+
``perf_jit`` backend. Patch by Pablo Galindo.

Python/sysmodule.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2373,14 +2373,14 @@ sys_activate_stack_trampoline_impl(PyObject *module, const char *backend)
23732373
return NULL;
23742374
}
23752375
}
2376-
else if (strcmp(backend, "perf_jit") == 0) {
2377-
_PyPerf_Callbacks cur_cb;
2378-
_PyPerfTrampoline_GetCallbacks(&cur_cb);
2379-
if (cur_cb.write_state != _Py_perfmap_jit_callbacks.write_state) {
2380-
if (_PyPerfTrampoline_SetCallbacks(&_Py_perfmap_jit_callbacks) < 0 ) {
2381-
PyErr_SetString(PyExc_ValueError, "can't activate perf jit trampoline");
2382-
return NULL;
2383-
}
2376+
}
2377+
else if (strcmp(backend, "perf_jit") == 0) {
2378+
_PyPerf_Callbacks cur_cb;
2379+
_PyPerfTrampoline_GetCallbacks(&cur_cb);
2380+
if (cur_cb.write_state != _Py_perfmap_jit_callbacks.write_state) {
2381+
if (_PyPerfTrampoline_SetCallbacks(&_Py_perfmap_jit_callbacks) < 0 ) {
2382+
PyErr_SetString(PyExc_ValueError, "can't activate perf jit trampoline");
2383+
return NULL;
23842384
}
23852385
}
23862386
}

0 commit comments

Comments
 (0)