mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
gh-131591: Execute the source and not the file to avoid locking it in Windows (#132712)
Signed-off-by: Pablo Galindo <pablogsal@gmail.com>
This commit is contained in:
parent
9752c84022
commit
c9a855a9e0
1 changed files with 21 additions and 35 deletions
|
@ -1211,41 +1211,9 @@ static inline void run_remote_debugger_script(const char *path)
|
|||
return;
|
||||
}
|
||||
|
||||
int fd = PyObject_AsFileDescriptor(fileobj);
|
||||
if (fd == -1) {
|
||||
PyErr_FormatUnraisable("Can't find fd for debugger script %s", path);
|
||||
}
|
||||
else {
|
||||
int dup_fd = -1;
|
||||
FILE *f = NULL;
|
||||
|
||||
#ifdef MS_WINDOWS
|
||||
dup_fd = _dup(fd);
|
||||
if (dup_fd != -1) {
|
||||
f = _fdopen(dup_fd, "r");
|
||||
}
|
||||
if (!f) {
|
||||
_close(dup_fd);
|
||||
}
|
||||
#else
|
||||
dup_fd = dup(fd);
|
||||
if (dup_fd != -1) {
|
||||
f = fdopen(dup_fd, "r");
|
||||
}
|
||||
if (!f) {
|
||||
close(dup_fd);
|
||||
}
|
||||
#endif
|
||||
if (!f) {
|
||||
PyErr_SetFromErrno(PyExc_OSError);
|
||||
}
|
||||
else {
|
||||
PyRun_AnyFileEx(f, path, 1);
|
||||
}
|
||||
|
||||
if (PyErr_Occurred()) {
|
||||
PyErr_FormatUnraisable("Error executing debugger script %s", path);
|
||||
}
|
||||
PyObject* source = PyObject_CallMethodNoArgs(fileobj, &_Py_ID(read));
|
||||
if (!source) {
|
||||
PyErr_FormatUnraisable("Error reading debugger script %s", path);
|
||||
}
|
||||
|
||||
PyObject* res = PyObject_CallMethodNoArgs(fileobj, &_Py_ID(close));
|
||||
|
@ -1255,6 +1223,24 @@ static inline void run_remote_debugger_script(const char *path)
|
|||
Py_DECREF(res);
|
||||
}
|
||||
Py_DECREF(fileobj);
|
||||
|
||||
if (source) {
|
||||
const char *str = PyBytes_AsString(source);
|
||||
if (str) {
|
||||
// PyRun_SimpleString() automatically raises an unraisable
|
||||
// exception if it fails so we don't need to check the return value.
|
||||
PyRun_SimpleString(str);
|
||||
} else {
|
||||
PyErr_FormatUnraisable("Error reading debugger script %s", path);
|
||||
}
|
||||
Py_DECREF(source);
|
||||
}
|
||||
|
||||
// Just in case something went wrong, don't leave this function
|
||||
// with an unhandled exception.
|
||||
if (PyErr_Occurred()) {
|
||||
PyErr_FormatUnraisable("Error executing debugger script %s", path);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue