* cygtls.h (_cygtls::init_exception_handler): Eliminate argument.

(_cygtls::andreas): Convert to a pointer.
(san): Convert to a real class with methods.  Use a linked list to keep track
of previous handlers on the "stack".
(myfault): Rewrite to use new san class rather than calling directly into
_cygtls.
* cygtls.cc (_cygtls::init_exception_handler): Just assume that we're always
using the standard exception handler.
(_cygtls::init_thread): Reflect loss of argument to init_exception_handler.
* dcrt0.cc (dll_crt0_1): Ditto.
* dfcn.cc (dlopen): Ditto.
(dlclose): Reset the exception handler after FreeLibrary.
* dll_init.cc (dll_list::detach): Make sure that the exception handler is
initialized before calling destructors.
* exceptions.cc (_cygtls::handle_exceptions): Accommodate new andreas pointer.
* thread.cc (verifyable_object_isvalid): Pass objectptr to faulted for explicit
NULL pointer checking.
* tlsoffsets.h: Regenerate.
This commit is contained in:
Christopher Faylor
2010-02-26 21:36:31 +00:00
parent b6336c95b4
commit d5d5bf4dd5
9 changed files with 125 additions and 89 deletions

View File

@ -169,6 +169,8 @@ dll_list::detach (void *retaddr)
system_printf ("WARNING: trying to detach an already detached dll ...");
if (--d->count == 0)
{
/* Make sure our exception handler is enabled for destructors */
_my_tls.init_exception_handler ();
__cxa_finalize (d);
d->run_dtors ();
d->prev->next = d->next;
@ -329,7 +331,7 @@ dll_dllcrt0_1 (VOID *x)
the exception handler should be guaranteed to be installed.
I'm leaving it in until potentially after the release of
1.7.1 */
_my_tls.init_exception_handler (_cygtls::handle_exceptions);
_my_tls.init_exception_handler ();
if (p == NULL)
p = &__cygwin_user_data;