diff options
-rw-r--r-- | ext/ExtUtils-Miniperl/lib/ExtUtils/Miniperl.pm | 10 | ||||
-rw-r--r-- | lib/ExtUtils/t/Embed.t | 8 | ||||
-rw-r--r-- | miniperlmain.c | 8 |
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() */ |