From fd416db406f9efdbbdbd7b63ea4f9ccf47eec8b3 Mon Sep 17 00:00:00 2001
From: Andrew Dunstan <andrew@dunslane.net>
Date: Thu, 4 Jun 2009 15:59:55 +0000
Subject: [PATCH] Initialise perl library as documented in perl API. Backpatch
 to release 7.4.

---
 src/pl/plperl/plperl.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c
index 7c6cc868cd4..f937c67bfa7 100644
--- a/src/pl/plperl/plperl.c
+++ b/src/pl/plperl/plperl.c
@@ -1,7 +1,7 @@
 /**********************************************************************
  * plperl.c - perl as a procedural language for PostgreSQL
  *
- *	  $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.146 2009/02/20 10:39:19 petere Exp $
+ *	  $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.147 2009/06/04 15:59:55 adunstan Exp $
  *
  **********************************************************************/
 
@@ -399,6 +399,8 @@ plperl_init_interp(void)
 		"", "-e", PERLBOOT
 	};
 
+	int nargs = 3;
+
 #ifdef WIN32
 
 	/*
@@ -442,13 +444,19 @@ plperl_init_interp(void)
 #endif
 
 
+#ifdef PERL_SYS_INIT3
+	/* only call this the first time through, as per perlembed man page */
+	if (interp_state == INTERP_NONE)
+		PERL_SYS_INIT3(&nargs, (char ***) &embedding, NULL);
+#endif
+
 	plperl_held_interp = perl_alloc();
 	if (!plperl_held_interp)
 		elog(ERROR, "could not allocate Perl interpreter");
 
 	perl_construct(plperl_held_interp);
 	perl_parse(plperl_held_interp, plperl_init_shared_libs,
-			   3, embedding, NULL);
+			   nargs, embedding, NULL);
 	perl_run(plperl_held_interp);
 
 	if (interp_state == INTERP_NONE)
-- 
GitLab