aboutsummaryrefslogtreecommitdiff
path: root/src/backend/port/dynloader/hpux.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2000-04-26 23:35:34 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2000-04-26 23:35:34 +0000
commit6a4fa7eccb1cca133721a4b1b7ae6d6e0881171e (patch)
tree58243e6c10ed67c4f81275c7ee662d6dbb9af38d /src/backend/port/dynloader/hpux.c
parent00645eb1fd733b4fa765f97b74d59abe7e27bff6 (diff)
downloadpostgresql-6a4fa7eccb1cca133721a4b1b7ae6d6e0881171e.tar.gz
postgresql-6a4fa7eccb1cca133721a4b1b7ae6d6e0881171e.zip
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.
Diffstat (limited to 'src/backend/port/dynloader/hpux.c')
-rw-r--r--src/backend/port/dynloader/hpux.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/backend/port/dynloader/hpux.c b/src/backend/port/dynloader/hpux.c
index 43832779b8f..562b59ee770 100644
--- a/src/backend/port/dynloader/hpux.c
+++ b/src/backend/port/dynloader/hpux.c
@@ -8,7 +8,7 @@
*
*
* 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
* all functions are defined here -- it's impossible to trace the
@@ -20,6 +20,7 @@
#include <a.out.h>
#include "postgres.h"
+
#include "dl.h"
#include "dynloader.h"
#include "fmgr.h"
@@ -28,7 +29,12 @@
void *
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;
}
@@ -54,5 +60,8 @@ pg_dlerror()
{
static char errmsg[] = "shl_load failed";
+ if (errno)
+ return strerror(errno);
+
return errmsg;
}