@@ -470,7 +470,9 @@ _PyPerfTrampoline_SetCallbacks(_PyPerf_Callbacks *callbacks)
470470 }
471471#ifdef PY_HAVE_PERF_TRAMPOLINE
472472 if (trampoline_api .state ) {
473- _PyPerfTrampoline_Fini ();
473+ if (_PyPerfTrampoline_Fini () < 0 ) {
474+ return -1 ;
475+ }
474476 }
475477 trampoline_api .init_state = callbacks -> init_state ;
476478 trampoline_api .write_state = callbacks -> write_state ;
@@ -486,12 +488,18 @@ _PyPerfTrampoline_Init(int activate)
486488#ifdef PY_HAVE_PERF_TRAMPOLINE
487489 PyThreadState * tstate = _PyThreadState_GET ();
488490 if (!activate ) {
489- PyUnstable_InterpreterState_SetEvalFrameFunc (tstate -> interp , prev_eval_frame );
491+ if (PyUnstable_InterpreterState_SetEvalFrameFunc (tstate -> interp ,
492+ prev_eval_frame ) < 0 ) {
493+ return -1 ;
494+ }
490495 perf_status = PERF_STATUS_NO_INIT ;
491496 }
492497 else if (tstate -> interp -> eval_frame != py_trampoline_evaluator ) {
493498 prev_eval_frame = PyUnstable_InterpreterState_GetEvalFrameFunc (tstate -> interp );
494- PyUnstable_InterpreterState_SetEvalFrameFunc (tstate -> interp , py_trampoline_evaluator );
499+ if (PyUnstable_InterpreterState_SetEvalFrameFunc (tstate -> interp ,
500+ py_trampoline_evaluator ) < 0 ) {
501+ return -1 ;
502+ }
495503 extra_code_index = _PyEval_RequestCodeExtraIndex (NULL );
496504 if (extra_code_index == -1 ) {
497505 return -1 ;
@@ -517,7 +525,9 @@ _PyPerfTrampoline_Fini(void)
517525 }
518526 PyThreadState * tstate = _PyThreadState_GET ();
519527 if (tstate -> interp -> eval_frame == py_trampoline_evaluator ) {
520- PyUnstable_InterpreterState_SetEvalFrameFunc (tstate -> interp , NULL );
528+ if (PyUnstable_InterpreterState_SetEvalFrameFunc (tstate -> interp , NULL ) < 0 ) {
529+ return -1 ;
530+ }
521531 }
522532 if (perf_status == PERF_STATUS_OK ) {
523533 trampoline_api .free_state (trampoline_api .state );
@@ -553,7 +563,9 @@ _PyPerfTrampoline_AfterFork_Child(void)
553563 if (perf_trampoline_type != PERF_TRAMPOLINE_TYPE_MAP ) {
554564 return PyStatus_Error ("Failed to copy perf map file as perf trampoline type is not type map." );
555565 }
556- _PyPerfTrampoline_Fini ();
566+ if (_PyPerfTrampoline_Fini () < 0 ) {
567+ return PyStatus_Error ("_PyPerfTrampoline_Fini() failed" );
568+ }
557569 char filename [256 ];
558570 pid_t parent_pid = getppid ();
559571 snprintf (filename , sizeof (filename ), "/tmp/perf-%d.map" , parent_pid );
@@ -563,7 +575,9 @@ _PyPerfTrampoline_AfterFork_Child(void)
563575 } else {
564576 // Restart trampoline in file in child.
565577 int was_active = _PyIsPerfTrampolineActive ();
566- _PyPerfTrampoline_Fini ();
578+ if (_PyPerfTrampoline_Fini () < 0 ) {
579+ return PyStatus_Error ("_PyPerfTrampoline_Fini() failed" );
580+ }
567581 if (was_active ) {
568582 _PyPerfTrampoline_Init (1 );
569583 }
0 commit comments