summaryrefslogtreecommitdiff
path: root/lib/ExtUtils
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2013-06-26 18:01:09 +0200
committerNicholas Clark <nick@ccl4.org>2013-07-12 12:51:39 +0200
commit5c64bffd0d9c35e88b9ac48fc997977163abcc50 (patch)
treeb6caa55fa3e482170bf8f3304e96de6a9937b7f4 /lib/ExtUtils
parent358c04b72260b75d5a00491f60fc675c4790fe11 (diff)
downloadperl-5c64bffd0d9c35e88b9ac48fc997977163abcc50.tar.gz
Fix SEGVs and test failures for -DPERL_GLOBAL_STRUCT_PRIVATE
With PERL_GLOBAL_STRUCT_PRIVATE "global" variables are in a structure in malloc()ed memory, not in global static variables or a global static structure. Hence no global variables are implicitly initialised to zero. * PL_curinterp and PL_op_sequence need initialising to NULL * The global structure is free()d before handlers registered with atexit() run, so be defensive about this. * Some C code checks SvOK(PL_sv_placeholder) so ensure that its SvFLAGS() are 0. * Zero PL_hash_seed
Diffstat (limited to 'lib/ExtUtils')
-rw-r--r--lib/ExtUtils/t/Embed.t4
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/ExtUtils/t/Embed.t b/lib/ExtUtils/t/Embed.t
index 7a83c98f76..9e52302bf4 100644
--- a/lib/ExtUtils/t/Embed.t
+++ b/lib/ExtUtils/t/Embed.t
@@ -210,6 +210,10 @@ int main(int argc, char **argv, char **env) {
#ifdef PERL_GLOBAL_STRUCT
free_global_struct(plvarsp);
+ 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() */
#endif /* PERL_GLOBAL_STRUCT */
return 0;