Crash in unloading in HP-UX while calling dlclose()
Alexey Melnikov
alexey.melnikov at isode.com
Tue May 30 07:46:16 EDT 2006
Biswatosh wrote:
>Hi Alexei,
>
>One of my folks is getting a crash in dlclose() on
>HP-UX.
>When I see the code for dlopen() and dlclose()
>functions in dlopen.c for HP-UX, I get the following
>doubts.
>
>My doubts are:
>
>1) In function dlopen(), why can't we simply call
>shl_load() and return?
>Why we are defining a shl_t *hp ? And, what we are
>trying to do by typecasting
>hp to dll_handle and returning that? dll_handle is of
>type shl_t whereas hp is of type
>shl_t*(which is therefore a double pointer).
>
>2)The reporter of the crash smells problem in the line
>return shl_unload(h) in dlclose().
>He suggests, it should be rather shl_unload(hp).What
>do you guys think? But anyway, I am not getting why
>in dlclose(), simply calling shl_unload(h) won't do.
>Any comments?
>
>
Looking at the code and HP-UX documentation it seems that you are right
in both cases.
Can you see if the attached patch works for you?
-------------- next part --------------
Index: dlopen.c
===================================================================
RCS file: /cvs/src/sasl/lib/dlopen.c,v
retrieving revision 1.49
diff -u -r1.49 dlopen.c
--- dlopen.c 15 Mar 2005 13:33:30 -0000 1.49
+++ dlopen.c 30 May 2006 11:44:28 -0000
@@ -95,7 +95,7 @@
#ifndef HAVE_DLFCN_H
#include <dl.h>
-typedef shl_t dll_handle;
+typedef shl_t * dll_handle;
typedef void * dll_func;
dll_handle
@@ -117,11 +117,18 @@
}
int
-dlclose(dll_handle h)
+dlclose(dll_handle hp)
{
- shl_t hp = *((shl_t *)h);
- if (hp != NULL) free(hp);
- return shl_unload(h);
+ shl_t h;
+
+ if (hp != NULL) {
+ h = *((shl_t *)hp);
+ free(hp);
+ return shl_unload(h);
+ } else {
+ /* Return error */
+ return -1;
+ }
}
dll_func
More information about the Cyrus-sasl
mailing list