66 ******************************************************************************/
77
88#include "_remote_debugging.h"
9+ #include "pycore_fileutils.h" // _Py_strerror()
910
1011#ifndef MS_WINDOWS
1112#include <unistd.h>
@@ -716,9 +717,13 @@ read_thread_ids(RemoteUnwinderObject *unwinder, _Py_RemoteDebug_ThreadsState *st
716717 int err = errno ;
717718 closedir (dir );
718719 _Py_RemoteDebug_InitThreadsState (unwinder , st );
719- _set_debug_oserror_from_errno_with_filename (err , task_path ,
720- "Failed to read process task directory '%s': %s" ,
721- task_path , strerror (err ));
720+ PyObject * message = _Py_strerror (err );
721+ if (message != NULL ) {
722+ _set_debug_oserror_from_errno_with_filename (err , task_path ,
723+ "Failed to read process task directory '%s': %S" ,
724+ task_path , message );
725+ Py_DECREF (message );
726+ }
722727 return -1 ;
723728 }
724729 break ;
@@ -749,9 +754,13 @@ read_thread_ids(RemoteUnwinderObject *unwinder, _Py_RemoteDebug_ThreadsState *st
749754 if (closedir (dir ) != 0 ) {
750755 int err = errno ;
751756 _Py_RemoteDebug_InitThreadsState (unwinder , st );
752- _set_debug_oserror_from_errno_with_filename (err , task_path ,
753- "Failed to close process task directory '%s': %s" ,
754- task_path , strerror (err ));
757+ PyObject * message = _Py_strerror (err );
758+ if (message != NULL ) {
759+ _set_debug_oserror_from_errno_with_filename (err , task_path ,
760+ "Failed to close process task directory '%s': %S" ,
761+ task_path , message );
762+ Py_DECREF (message );
763+ }
755764 return -1 ;
756765 }
757766 st -> tids = unwinder -> thread_tids ;
@@ -816,8 +825,12 @@ _Py_RemoteDebug_StopAllThreads(RemoteUnwinderObject *unwinder, _Py_RemoteDebug_T
816825 }
817826 if (ret < 0 ) {
818827 detach_threads (st , seized );
819- _set_debug_oserror_from_errno (err ,
820- "Failed to seize thread %d: %s" , tid , strerror (err ));
828+ PyObject * message = _Py_strerror (err );
829+ if (message != NULL ) {
830+ _set_debug_oserror_from_errno (err ,
831+ "Failed to seize thread %d: %S" , tid , message );
832+ Py_DECREF (message );
833+ }
821834 _Py_RemoteDebug_InitThreadsState (unwinder , st );
822835 return -1 ;
823836 }
@@ -827,8 +840,12 @@ _Py_RemoteDebug_StopAllThreads(RemoteUnwinderObject *unwinder, _Py_RemoteDebug_T
827840 err = errno ;
828841 if (err != ESRCH ) {
829842 detach_threads (st , seized );
830- _set_debug_oserror_from_errno (err ,
831- "Failed to interrupt thread %d: %s" , tid , strerror (err ));
843+ PyObject * message = _Py_strerror (err );
844+ if (message != NULL ) {
845+ _set_debug_oserror_from_errno (err ,
846+ "Failed to interrupt thread %d: %S" , tid , message );
847+ Py_DECREF (message );
848+ }
832849 _Py_RemoteDebug_InitThreadsState (unwinder , st );
833850 return -1 ;
834851 }
@@ -839,8 +856,12 @@ _Py_RemoteDebug_StopAllThreads(RemoteUnwinderObject *unwinder, _Py_RemoteDebug_T
839856 err = errno ;
840857 if (err != ECHILD && err != ESRCH ) {
841858 detach_threads (st , seized );
842- _set_debug_oserror_from_errno (err ,
843- "waitpid failed for thread %d: %s" , tid , strerror (err ));
859+ PyObject * message = _Py_strerror (err );
860+ if (message != NULL ) {
861+ _set_debug_oserror_from_errno (err ,
862+ "waitpid failed for thread %d: %S" , tid , message );
863+ Py_DECREF (message );
864+ }
844865 _Py_RemoteDebug_InitThreadsState (unwinder , st );
845866 return -1 ;
846867 }
0 commit comments