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

Skip to content

Commit 9ebcbc1

Browse files
authored
Merge pull request #17404 from anntzer/dlclose
Don't forget to dlclose() main_program in tkagg init.
2 parents 7ce2788 + dfa7d1c commit 9ebcbc1

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

src/_tkagg.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ void load_tkinter_funcs(void)
161161
void load_tkinter_funcs(void)
162162
{
163163
// Load tkinter global funcs from tkinter compiled module.
164-
void *main_program, *tkinter_lib;
164+
void *main_program = NULL, *tkinter_lib = NULL;
165165
PyObject *module = NULL, *py_path = NULL, *py_path_b = NULL;
166166
char *path;
167167

@@ -190,11 +190,18 @@ void load_tkinter_funcs(void)
190190
PyErr_SetString(PyExc_RuntimeError, dlerror());
191191
goto exit;
192192
}
193-
load_tk(tkinter_lib);
194-
// dlclose is safe because tkinter has been imported.
195-
dlclose(tkinter_lib);
196-
goto exit;
193+
if (load_tk(tkinter_lib)) {
194+
goto exit;
195+
}
196+
197197
exit:
198+
// We don't need to keep a reference open as the main program & tkinter
199+
// have been imported. Use a non-short-circuiting "or" to try closing both
200+
// handles before handling errors.
201+
if ((main_program && dlclose(main_program))
202+
| (tkinter_lib && dlclose(tkinter_lib))) {
203+
PyErr_SetString(PyExc_RuntimeError, dlerror());
204+
}
198205
Py_XDECREF(module);
199206
Py_XDECREF(py_path);
200207
Py_XDECREF(py_path_b);

0 commit comments

Comments
 (0)