Commit 6a4fa7ec authored by Tom Lane's avatar Tom Lane

On HPUX, shl_load should be called with options BIND_IMMEDIATE rather

than BIND_DEFERRED.  That way, if the loaded library has unresolved
references, shl_load fails cleanly.  As we had it, shl_load would
succeed and then the dynlinker would call abort() when we try to call
into the loaded library.  abort()ing a backend is uncool.
parent 00645eb1
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/port/dynloader/hpux.c,v 1.12 2000/01/26 05:56:44 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/port/dynloader/hpux.c,v 1.13 2000/04/26 23:35:34 tgl Exp $
* *
* NOTES * NOTES
* all functions are defined here -- it's impossible to trace the * all functions are defined here -- it's impossible to trace the
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <a.out.h> #include <a.out.h>
#include "postgres.h" #include "postgres.h"
#include "dl.h" #include "dl.h"
#include "dynloader.h" #include "dynloader.h"
#include "fmgr.h" #include "fmgr.h"
...@@ -28,7 +29,12 @@ ...@@ -28,7 +29,12 @@
void * void *
pg_dlopen(char *filename) pg_dlopen(char *filename)
{ {
shl_t handle = shl_load(filename, BIND_DEFERRED, 0); /*
* Use BIND_IMMEDIATE so that undefined symbols cause a failure return
* from shl_load(), rather than an abort() later on when we attempt to
* call the library!
*/
shl_t handle = shl_load(filename, BIND_IMMEDIATE | BIND_VERBOSE, 0);
return (void *) handle; return (void *) handle;
} }
...@@ -54,5 +60,8 @@ pg_dlerror() ...@@ -54,5 +60,8 @@ pg_dlerror()
{ {
static char errmsg[] = "shl_load failed"; static char errmsg[] = "shl_load failed";
if (errno)
return strerror(errno);
return errmsg; return errmsg;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment