Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 01cfd30

Browse files
authored
Merge pull request #25858 from anntzer/dc
Get dlerror() immediately after dlclose() fails.
2 parents f394597 + 286eeda commit 01cfd30

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

src/_tkagg.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -324,11 +324,16 @@ void load_tkinter_funcs(void)
324324

325325
exit:
326326
// We don't need to keep a reference open as the main program & tkinter
327-
// have been imported. Use a non-short-circuiting "or" to try closing both
328-
// handles before handling errors.
329-
if ((main_program && dlclose(main_program))
330-
| (tkinter_lib && dlclose(tkinter_lib))) {
327+
// have been imported. Try to close each library separately (otherwise the
328+
// second dlclose could clear a dlerror from the first dlclose).
329+
bool raised_dlerror = false;
330+
if (main_program && dlclose(main_program) && !raised_dlerror) {
331331
PyErr_SetString(PyExc_RuntimeError, dlerror());
332+
raised_dlerror = true;
333+
}
334+
if (tkinter_lib && dlclose(tkinter_lib) && !raised_dlerror) {
335+
PyErr_SetString(PyExc_RuntimeError, dlerror());
336+
raised_dlerror = true;
332337
}
333338
Py_XDECREF(module);
334339
Py_XDECREF(py_path);

0 commit comments

Comments
 (0)