Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2010-02-27 00:36:31 +0300
committerChristopher Faylor <me@cgf.cx>2010-02-27 00:36:31 +0300
commitd5d5bf4dd5609dd29e511d688e317b2f0f1987ca (patch)
tree01fa2b080346cfda5b393bc54c0ab387524c2f33 /winsup/cygwin/dlfcn.cc
parentb6336c95b4c1d512d4cb139e7b97ec4d1ef843fc (diff)
* 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.
Diffstat (limited to 'winsup/cygwin/dlfcn.cc')
-rw-r--r--winsup/cygwin/dlfcn.cc15
1 files changed, 12 insertions, 3 deletions
diff --git a/winsup/cygwin/dlfcn.cc b/winsup/cygwin/dlfcn.cc
index a1087dba2..77d26f243 100644
--- a/winsup/cygwin/dlfcn.cc
+++ b/winsup/cygwin/dlfcn.cc
@@ -110,7 +110,7 @@ dlopen (const char *name, int)
ret = (void *) LoadLibraryW (path);
/* In case it was removed by LoadLibrary. */
- _my_tls.init_exception_handler (_cygtls::handle_exceptions);
+ _my_tls.init_exception_handler ();
/* Restore original cxx_malloc pointer. */
__cygwin_user_data.cxx_malloc = tmp_malloc;
@@ -160,9 +160,18 @@ dlsym (void *handle, const char *name)
int
dlclose (void *handle)
{
- int ret = -1;
- if (handle == GetModuleHandle (NULL) || FreeLibrary ((HMODULE) handle))
+ int ret;
+ if (handle == GetModuleHandle (NULL))
ret = 0;
+ else
+ {
+ if (FreeLibrary ((HMODULE) handle))
+ ret = 0;
+ else
+ ret = -1;
+ /* In case it was removed by FreeLibrary */
+ _my_tls.init_exception_handler ();
+ }
if (ret)
set_dl_error ("dlclose");
return ret;