summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/ExtUtils-Miniperl/lib/ExtUtils/Miniperl.pm10
-rw-r--r--lib/ExtUtils/t/Embed.t8
-rw-r--r--miniperlmain.c8
3 files changed, 22 insertions, 4 deletions
diff --git a/ext/ExtUtils-Miniperl/lib/ExtUtils/Miniperl.pm b/ext/ExtUtils-Miniperl/lib/ExtUtils/Miniperl.pm
index 730c565d12..cede3180f8 100644
--- a/ext/ExtUtils-Miniperl/lib/ExtUtils/Miniperl.pm
+++ b/ext/ExtUtils-Miniperl/lib/ExtUtils/Miniperl.pm
@@ -8,7 +8,7 @@ use vars qw($VERSION @ISA @EXPORT);
@ISA = qw(Exporter);
@EXPORT = qw(writemain);
-$VERSION = 1;
+$VERSION = '1.01';
# blead will run this with miniperl, hence we can't use autodie or File::Temp
my $temp;
@@ -99,6 +99,8 @@ main(int argc, char **argv, char **env)
#ifdef PERL_GLOBAL_STRUCT
struct perl_vars *my_vars = init_global_struct();
# ifdef PERL_GLOBAL_STRUCT_PRIVATE
+ int veto;
+
my_plvarsp = my_vars;
# endif
#endif /* PERL_GLOBAL_STRUCT */
@@ -175,9 +177,13 @@ main(int argc, char **argv, char **env)
PERL_SYS_TERM();
#ifdef PERL_GLOBAL_STRUCT
+# ifdef PERL_GLOBAL_STRUCT_PRIVATE
+ veto = my_plvarsp->Gveto_cleanup;
+# endif
free_global_struct(my_vars);
# ifdef PERL_GLOBAL_STRUCT_PRIVATE
- my_plvarsp = NULL;
+ if (!veto)
+ my_plvarsp = NULL;
/* Remember, functions registered with atexit() can run after this point,
and may access "global" variables, and hence end up calling
Perl_GetVarsPrivate() */
diff --git a/lib/ExtUtils/t/Embed.t b/lib/ExtUtils/t/Embed.t
index c02640cd76..4e05cfea41 100644
--- a/lib/ExtUtils/t/Embed.t
+++ b/lib/ExtUtils/t/Embed.t
@@ -177,6 +177,8 @@ int main(int argc, char **argv, char **env) {
#ifdef PERL_GLOBAL_STRUCT
struct perl_vars *my_vars = init_global_struct();
# ifdef PERL_GLOBAL_STRUCT_PRIVATE
+ int veto;
+
my_plvarsp = my_vars;
# endif
#endif /* PERL_GLOBAL_STRUCT */
@@ -215,9 +217,13 @@ int main(int argc, char **argv, char **env) {
PERL_SYS_TERM();
#ifdef PERL_GLOBAL_STRUCT
+# ifdef PERL_GLOBAL_STRUCT_PRIVATE
+ veto = my_plvarsp->Gveto_cleanup;
+# endif
free_global_struct(my_vars);
# ifdef PERL_GLOBAL_STRUCT_PRIVATE
- my_plvarsp = NULL;
+ if (!veto)
+ my_plvarsp = NULL;
/* Remember, functions registered with atexit() can run after this point,
and may access "global" variables, and hence end up calling
Perl_GetVarsPrivate() */
diff --git a/miniperlmain.c b/miniperlmain.c
index a1ef2f1574..f22dcbba8d 100644
--- a/miniperlmain.c
+++ b/miniperlmain.c
@@ -70,6 +70,8 @@ main(int argc, char **argv, char **env)
#ifdef PERL_GLOBAL_STRUCT
struct perl_vars *my_vars = init_global_struct();
# ifdef PERL_GLOBAL_STRUCT_PRIVATE
+ int veto;
+
my_plvarsp = my_vars;
# endif
#endif /* PERL_GLOBAL_STRUCT */
@@ -146,9 +148,13 @@ main(int argc, char **argv, char **env)
PERL_SYS_TERM();
#ifdef PERL_GLOBAL_STRUCT
+# ifdef PERL_GLOBAL_STRUCT_PRIVATE
+ veto = my_plvarsp->Gveto_cleanup;
+# endif
free_global_struct(my_vars);
# ifdef PERL_GLOBAL_STRUCT_PRIVATE
- my_plvarsp = NULL;
+ if (!veto)
+ my_plvarsp = NULL;
/* Remember, functions registered with atexit() can run after this point,
and may access "global" variables, and hence end up calling
Perl_GetVarsPrivate() */