Re: Proposed Fix for GTK3 Crashes - dlopen flags
Scott Talbert <[email protected]>
| Newsgroups | gmane.comp.python.wxpython.devel |
|---|---|
| Message-ID | <[email protected]> |
On Tue, 3 Mar 2015, Robin Dunn wrote: >>> Basically, this would change the dlopen flags before importing the >>> core module to RTLD_GLOBAL and then change them back afterwards. That >>> way, the core module and its dependencies (to include GTK) are loaded >>> into the global namespace. >>> >>> Comments on this proposal? >>> >>> It needs more work but I wanted to get feedback before finalizing a >>> patch. (ie, it probably only needs to be done on when we're using a >>> GTK+3 backend, needs to check whether the dl module is available, etc.) >> >> Okay, here's an updated version of the patch. Unfortunately, it isn't >> possible to check the backend (and only change the dlopen flags if on >> GTK+3) because the backend isn't known until _core.so is imported. After >> that point, it's too late. >> >> It's possible that we could somehow have SWIG put this into the >> generated _core.py only for GTK+3, but I'm not sure how to do that. >> >> Comments? > > I'm curious how pygtk handles this. Have you checked there? PyGTK is GTK2 only. I don't think they started doing this dynamic UI builder stuff until GTK3. In PyGObject (the recommended GTK3 replacement for PyGTK), they basically do exactly this - dlopen all the GTK libraries into the global namespace. > IIRC in the early days of OSX the default was the OSX equivalent of > RTLD_GLOBAL, and it caused some hard to diagnose issues. The alternative > at the time was a 2 level namespace and using that meant that extension > modules couldn't find the Python C API functions, so it was even worse. > So setting RTLD_GLOBAL worries me a bit. I too am a bit worried about the impacts of RTLD_GLOBAL. Thus, I suggested a less risky workaround patch to wxWidgets for the Font Chooser crash - posted to the bug report. It could probably be used in the wxPython C++ code if the wxWidgets guys won't take it. Scott