

> Zeugswetter Andreas SB <ZeugswetterA@wien.spardat.at> writes:
> > Why do you declare dlopen, dlsym, ... in dynamic_loader.h ?
> > They are defined in the port specific dynloader.h .
> > Why do you use "void pg_dlclose" when dlclose is "int dlclose" ?
> > This makes a wrapper function necessary.
> 
> It seems to me that the real problem here is that someone tried to
> take shortcuts in the AIX dynloader code.

actually most other ports do it that way. e.g. FreeBSD
so I guess that is why it is done like that. The aix.c and aix.h
where originally generic files to support the usual dl... functions,
and thus had no connex to postgres. I would like to keep it that way
since aix now has it's own libdl.a with the functions making them obsolete
(they have problems accessing exported global variables though,
have to look deeper).

> Instead of implementing
> the same interface that the rest of the ports support, the AIX files
> try to force their own definition of the pg_dlXXX functions --- and
> for what?  To save a wrapper function?  These are hardly performance-
> critical routines, so I don't see the point.

Yes.

> 
> I propose the following changes instead.  I don't have any way to
> test them however --- would you check them?

With the modification below it works, yes. 

> 
> 			regards, tom lane
> 
> *** aix.h~	Mon Jul 17 00:40:12 2000
> --- aix.h	Mon Jul 17 00:41:34 2000
> ***************
> *** 45,56 ****
>   
>   #ifdef __cplusplus
>   }
> - 
>   #endif
> - 
> - #define  pg_dlopen(f)	dlopen(filename, RTLD_LAZY)
> - #define  pg_dlsym(h,f)	dlsym(h, f)
> - #define  pg_dlclose(h)	dlclose(h)
> - #define  pg_dlerror()	dlerror()
>   
>   #endif	 /* __dlfcn_h__ */
> --- 45,50 ----
> *** aix.c~	Mon Jul 17 00:40:19 2000
> --- aix.c	Mon Jul 17 00:45:34 2000

also #include "utils/dynamic_loader.h" for PGFunction

> ***************
> *** 601,603 ****
> --- 601,631 ----
>   	free(buf);
>   	return ret;
>   }
> + 
> + /*
> +  * PostgreSQL interface to the above functions
> +  */
> + 
> + void *
> + pg_dlopen(char *filename)
> + {
> + 	return dlopen(filename, RTLD_LAZY);
> + }
> + 
> + PGFunction
> + pg_dlsym(void *handle, char *funcname)
> + {
> + 	return (PGFunction) dlsym(handle, funcname);
> + }
> + 
> + void
> + pg_dlclose(void *handle)
> + {
> + 	dlclose(h);

you mean: dlclose(handle);

> + }
> + 
> + char *
> + pg_dlerror()
> + {
> + 	return dlerror();
> + }
>

Andreas 

Thu, 27 Jul 2000 15:20:18 +0200
Zeugswetter Andreas SB <ZeugswetterA@wien.spardat.at>
AW: AW: fmgr changes not yet ported to AIX 
Zeugswetter Andreas SB <ZeugswetterA@wien.spardat.at> writes:
>> It seems to me that the real problem here is that someone tried to
>> take shortcuts in the AIX dynloader code.

> actually most other ports do it that way. e.g. FreeBSD
> so I guess that is why it is done like that.

Hmm, good point.  I wonder why we don't see problems with them?  Perhaps
the underlying functions have the right signatures on those platforms.

>> + void
>> + pg_dlclose(void *handle)
>> + {
>> + 	dlclose(h);

> you mean: dlclose(handle);

Ooops :-(.  Thanks for the correction.

			regards, tom lane

Thu, 27 Jul 2000 09:53:27 -0400
Tom Lane <tgl@sss.pgh.pa.us>
Re: AW: AW: fmgr changes not yet ported to AIX 