Skip to content

Commit 4ceb077

Browse files
authored
pythongh-141579: Fix perf_jit backend in sys.activate_stack_trampoline() (python#141580)
1 parent 53d65c8 commit 4ceb077

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
@@ -238,6 +238,24 @@ def test_sys_api_get_status(self):
238238
"""
239239
assert_python_ok("-c", code, PYTHON_JIT="0")
240240

241+
def test_sys_api_perf_jit_backend(self):
242+
code = """if 1:
243+
import sys
244+
sys.activate_stack_trampoline("perf_jit")
245+
assert sys.is_stack_trampoline_active() is True
246+
sys.deactivate_stack_trampoline()
247+
assert sys.is_stack_trampoline_active() is False
248+
"""
249+
assert_python_ok("-c", code, PYTHON_JIT="0")
250+
251+
def test_sys_api_with_existing_perf_jit_trampoline(self):
252+
code = """if 1:
253+
import sys
254+
sys.activate_stack_trampoline("perf_jit")
255+
sys.activate_stack_trampoline("perf_jit")
256+
"""
257+
assert_python_ok("-c", code, PYTHON_JIT="0")
258+
241259

242260
def is_unwinding_reliable_with_frame_pointers():
243261
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
@@ -2380,14 +2380,14 @@ sys_activate_stack_trampoline_impl(PyObject *module, const char *backend)
23802380
return NULL;
23812381
}
23822382
}
2383-
else if (strcmp(backend, "perf_jit") == 0) {
2384-
_PyPerf_Callbacks cur_cb;
2385-
_PyPerfTrampoline_GetCallbacks(&cur_cb);
2386-
if (cur_cb.write_state != _Py_perfmap_jit_callbacks.write_state) {
2387-
if (_PyPerfTrampoline_SetCallbacks(&_Py_perfmap_jit_callbacks) < 0 ) {
2388-
PyErr_SetString(PyExc_ValueError, "can't activate perf jit trampoline");
2389-
return NULL;
2390-
}
2383+
}
2384+
else if (strcmp(backend, "perf_jit") == 0) {
2385+
_PyPerf_Callbacks cur_cb;
2386+
_PyPerfTrampoline_GetCallbacks(&cur_cb);
2387+
if (cur_cb.write_state != _Py_perfmap_jit_callbacks.write_state) {
2388+
if (_PyPerfTrampoline_SetCallbacks(&_Py_perfmap_jit_callbacks) < 0 ) {
2389+
PyErr_SetString(PyExc_ValueError, "can't activate perf jit trampoline");
2390+
return NULL;
23912391
}
23922392
}
23932393
}

0 commit comments

Comments
 (0)