aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Dunstan <andrew@dunslane.net>2009-06-05 20:32:41 +0000
committerAndrew Dunstan <andrew@dunslane.net>2009-06-05 20:32:41 +0000
commitb3452713ff4647d1140ed6774392a95afdb1038e (patch)
treeebf0e09dd14300e6761620528809825fd59ed631 /src
parent64a4c69fbb952cd4da02b266ed09eaf8c1266d0d (diff)
downloadpostgresql-b3452713ff4647d1140ed6774392a95afdb1038e.tar.gz
postgresql-b3452713ff4647d1140ed6774392a95afdb1038e.zip
Adjust recent PERL_SYS_INIT3 call to avoid platforms where it might fail, and to remove compilation warning. Backpatch the release 7.4
Diffstat (limited to 'src')
-rw-r--r--src/pl/plperl/plperl.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c
index 75aa058ba0e..84076d2b65b 100644
--- a/src/pl/plperl/plperl.c
+++ b/src/pl/plperl/plperl.c
@@ -33,7 +33,7 @@
* ENHANCEMENTS, OR MODIFICATIONS.
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.94.2.11 2009/06/04 16:00:49 adunstan Exp $
+ * $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.94.2.12 2009/06/05 20:32:41 adunstan Exp $
*
**********************************************************************/
@@ -284,6 +284,8 @@ plperl_init_interp(void)
int nargs = 3;
+ char *dummy_perl_env[1] = { NULL };
+
#ifdef WIN32
/*
@@ -323,8 +325,17 @@ plperl_init_interp(void)
#endif
-#ifdef PERL_SYS_INIT3
- PERL_SYS_INIT3(&nargs, (char ***) &embedding, NULL);
+ /****
+ * The perl API docs state that PERL_SYS_INIT3 should be called before
+ * allocating interprters. Unfortunately, on some platforms this fails
+ * in the Perl_do_taint() routine, which is called when the platform is
+ * using the system's malloc() instead of perl's own. Other platforms,
+ * notably Windows, fail if PERL_SYS_INIT3 is not called. So we call it
+ * if it's available, unless perl is using the system malloc(), which is
+ * true when MYMALLOC is set.
+ */
+#if defined(PERL_SYS_INIT3) && !defined(MYMALLOC)
+ PERL_SYS_INIT3(&nargs, (char ***)&embedding, (char***)&dummy_perl_env);
#endif
plperl_interp = perl_alloc();