On 09/05/17 18:12, Nick Reilly wrote: > > > On 2017-05-09 10:08 AM, Matt Caswell wrote: >> >> I'm not sure why this makes a difference. The return value of dlclose() >> tells you whether there has been an error or not. Not whether the >> library has actually been removed from address space. Or am I missing >> your point? > > dlclose() is returning an error and dlerror() reports that the library > cannot be closed as it is still in use (from the leaked reference).
Hmmm. Arguably that is broken dlclose() behaviour. dlclose() is just supposed to inform the system that a handle previously returned by dlopen() is no longer required by the application. AFAIK there is no requirement for all other handles returned from other dlopen() open calls for the same shared library to be closed first (how would that work anyway...unless there was a strict requirement for the handle returned from the first call to dlopen() to always be the last one to be used in a call to dlclose()?). This is not a problem on other non-linux Unix based systems that we have tried it on, so it looks to be something peculiar to QNX. Does QNX have a "-znodelete" equivalent? That would be the most preferable fix. Another option might be something like this: diff --git a/test/shlibloadtest.c b/test/shlibloadtest.c index 6f220ba530..bc701b4333 100644 --- a/test/shlibloadtest.c +++ b/test/shlibloadtest.c @@ -65,8 +65,16 @@ static int shlib_sym(SHLIB lib, const char *symname, SHLIB_SYM *sym) static int shlib_close(SHLIB lib) { +#ifdefined OPENSSL_SYS_QNX + /* + * Ignore errors from dlclose() on QNX to avoid spurious complaints about + * being unable to close it due to it still being in use. + */ + dlclose(lib); +#else if (dlclose(lib) != 0) return 0; +#endif return 1; } Matt -- openssl-dev mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev