C++ app segfaults in libstdc++
Dave Korn
dave.korn.cygwin@gmail.com
Thu Jun 17 12:03:00 GMT 2010
On 17/06/2010 03:41, Charles Wilson wrote:
> Any ideas?
Yes, I have one:
> catch (modexc e) {
> std::cerr << "caught: " << e.what () << '\n';
> if (dlclose (handle))
> {
> std::cerr << "dlclose failed: " << dlerror () << '\n';
> return 1;
> }
> return 0;
> }
You're unloading the module, before the exception that it threw goes out of
scope.
At this time, the modexc object e has not yet been destructed, the catch is
still 'live', and when you attempt to exit the catch block, __cxa_end_catch
gets fatally confused. The live exception still contains pointers into where
the dll used to be loaded: it has typeinfo there, and a pointer to the
module's inlined instance of the ~modexc() dtor.
I think the rule is: Don't unload a shared library while you still have a
live C++ object from it, unless that object is a POD.
cheers,
DaveK
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
More information about the Cygwin
mailing list