dlclose tries to decrease the ref count of the dll* entry, but a new dll opened by dlopen doesn't create a new dll* entry. --- winsup/cygwin/dlfcn.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/winsup/cygwin/dlfcn.cc b/winsup/cygwin/dlfcn.cc index fb7052473..3093ec1be 100644 --- a/winsup/cygwin/dlfcn.cc +++ b/winsup/cygwin/dlfcn.cc @@ -350,14 +350,15 @@ dlclose (void *handle) { /* reference counting */ dll *d = dlls.find (handle); - if (!d || d->count <= 0) + if (d && d->count <= 0) { errno = ENOENT; ret = -1; } else { - --d->count; + if (d) + --d->count; if (!FreeLibrary ((HMODULE) handle)) { __seterrno (); -- 2.48.1.windows.1-2