@@ -799,18 +799,19 @@ emit_batch(RemoteDebuggingState *state, PyObject *collector,
799799 frame_indices , stack_depth , reader , timestamps_list );
800800}
801801
802- /* Helper to invoke progress callback, clearing any errors */
803- static inline void
802+ /* Helper to invoke progress callback, returns -1 on error */
803+ static inline int
804804invoke_progress_callback (PyObject * callback , Py_ssize_t current , uint32_t total )
805805{
806806 if (callback && callback != Py_None ) {
807807 PyObject * result = PyObject_CallFunction (callback , "nI" , current , total );
808808 if (result ) {
809809 Py_DECREF (result );
810810 } else {
811- PyErr_Clear () ;
811+ return -1 ;
812812 }
813813 }
814+ return 0 ;
814815}
815816
816817Py_ssize_t
@@ -838,7 +839,9 @@ binary_reader_replay(BinaryReader *reader, PyObject *collector, PyObject *progre
838839 Py_ssize_t replayed = 0 ;
839840
840841 /* Initial progress callback at 0% */
841- invoke_progress_callback (progress_callback , 0 , reader -> sample_count );
842+ if (invoke_progress_callback (progress_callback , 0 , reader -> sample_count ) < 0 ) {
843+ return -1 ;
844+ }
842845
843846 while (offset < reader -> sample_data_size ) {
844847 /* Read thread_id (8 bytes) + interpreter_id (4 bytes) */
@@ -954,7 +957,9 @@ binary_reader_replay(BinaryReader *reader, PyObject *collector, PyObject *progre
954957
955958 /* Progress callback after batch */
956959 if (replayed % PROGRESS_CALLBACK_INTERVAL < count ) {
957- invoke_progress_callback (progress_callback , replayed , reader -> sample_count );
960+ if (invoke_progress_callback (progress_callback , replayed , reader -> sample_count ) < 0 ) {
961+ return -1 ;
962+ }
958963 }
959964 break ;
960965 }
@@ -1026,12 +1031,16 @@ binary_reader_replay(BinaryReader *reader, PyObject *collector, PyObject *progre
10261031
10271032 /* Progress callback */
10281033 if (replayed % PROGRESS_CALLBACK_INTERVAL == 0 ) {
1029- invoke_progress_callback (progress_callback , replayed , reader -> sample_count );
1034+ if (invoke_progress_callback (progress_callback , replayed , reader -> sample_count ) < 0 ) {
1035+ return -1 ;
1036+ }
10301037 }
10311038 }
10321039
10331040 /* Final progress callback at 100% */
1034- invoke_progress_callback (progress_callback , replayed , reader -> sample_count );
1041+ if (invoke_progress_callback (progress_callback , replayed , reader -> sample_count ) < 0 ) {
1042+ return -1 ;
1043+ }
10351044
10361045 return replayed ;
10371046}
0 commit comments