summaryrefslogtreecommitdiff
path: root/embedvar.h
diff options
context:
space:
mode:
authorKarl Williamson <khw@cpan.org>2019-11-24 20:48:54 -0700
committerKarl Williamson <khw@cpan.org>2019-11-26 19:38:14 -0700
commita8def808210e08cea0b7889fea7c5146b21af4ed (patch)
tree40bd3017953f36bf853b7dec6c07e818d1d3588e /embedvar.h
parente4b61f959ac649d109da4ede1fba8cfa793a79a4 (diff)
downloadperl-a8def808210e08cea0b7889fea7c5146b21af4ed.tar.gz
Move regex global variables to interpreter level
This is part of fixing gh #17154 This scenario from the ticket (https://github.com/Perl/perl5/issues/17154#issuecomment-558877358) shows why this fix is necessary: main interpreter initializes PL_AboveLatin1 to an SV it owns loads threads::lite and creates a new thread/interpreter which initializes PL_AboveLatin1 to a SV owned by the new interpreter threads::lite child interpreter finishes, freeing all of its SVs, PL_AboveLatin1 is now invalid main interpreter uses a regexp that relies on PL_AboveLatin1, dies horribly. By making these interpreter level variables, this is avoided. There is extra copying, but it is just the SV headers, as the real data is kept as static C arrays.
Diffstat (limited to 'embedvar.h')
-rw-r--r--embedvar.h93
1 files changed, 31 insertions, 62 deletions
diff --git a/embedvar.h b/embedvar.h
index 2f96743593..63a741edb6 100644
--- a/embedvar.h
+++ b/embedvar.h
@@ -40,6 +40,9 @@
# define vTHX PERL_GET_INTERP
# endif
+#define PL_AboveLatin1 (vTHX->IAboveLatin1)
+#define PL_Assigned_invlist (vTHX->IAssigned_invlist)
+#define PL_CCC_non0_non230 (vTHX->ICCC_non0_non230)
#define PL_DBcontrol (vTHX->IDBcontrol)
#define PL_DBcv (vTHX->IDBcv)
#define PL_DBgv (vTHX->IDBgv)
@@ -50,15 +53,28 @@
#define PL_DBtrace (vTHX->IDBtrace)
#define PL_Dir (vTHX->IDir)
#define PL_Env (vTHX->IEnv)
+#define PL_GCB_invlist (vTHX->IGCB_invlist)
+#define PL_HasMultiCharFold (vTHX->IHasMultiCharFold)
+#define PL_InBitmap (vTHX->IInBitmap)
+#define PL_InMultiCharFold (vTHX->IInMultiCharFold)
+#define PL_LB_invlist (vTHX->ILB_invlist)
#define PL_LIO (vTHX->ILIO)
+#define PL_Latin1 (vTHX->ILatin1)
#define PL_Mem (vTHX->IMem)
#define PL_MemParse (vTHX->IMemParse)
#define PL_MemShared (vTHX->IMemShared)
+#define PL_Posix_ptrs (vTHX->IPosix_ptrs)
+#define PL_Private_Use (vTHX->IPrivate_Use)
#define PL_Proc (vTHX->IProc)
+#define PL_SB_invlist (vTHX->ISB_invlist)
+#define PL_SCX_invlist (vTHX->ISCX_invlist)
#define PL_Sock (vTHX->ISock)
#define PL_StdIO (vTHX->IStdIO)
#define PL_Sv (vTHX->ISv)
#define PL_TR_SPECIAL_HANDLING_UTF8 (vTHX->ITR_SPECIAL_HANDLING_UTF8)
+#define PL_UpperLatin1 (vTHX->IUpperLatin1)
+#define PL_WB_invlist (vTHX->IWB_invlist)
+#define PL_XPosix_ptrs (vTHX->IXPosix_ptrs)
#define PL_Xpv (vTHX->IXpv)
#define PL_an (vTHX->Ian)
#define PL_argvgv (vTHX->Iargvgv)
@@ -156,6 +172,7 @@
#define PL_in_clean_objs (vTHX->Iin_clean_objs)
#define PL_in_eval (vTHX->Iin_eval)
#define PL_in_load_module (vTHX->Iin_load_module)
+#define PL_in_some_fold (vTHX->Iin_some_fold)
#define PL_in_utf8_COLLATE_locale (vTHX->Iin_utf8_COLLATE_locale)
#define PL_in_utf8_CTYPE_locale (vTHX->Iin_utf8_CTYPE_locale)
#define PL_in_utf8_turkic_locale (vTHX->Iin_utf8_turkic_locale)
@@ -332,6 +349,20 @@
#define PL_unitcheckav_save (vTHX->Iunitcheckav_save)
#define PL_unlockhook (vTHX->Iunlockhook)
#define PL_unsafe (vTHX->Iunsafe)
+#define PL_utf8_charname_begin (vTHX->Iutf8_charname_begin)
+#define PL_utf8_charname_continue (vTHX->Iutf8_charname_continue)
+#define PL_utf8_idcont (vTHX->Iutf8_idcont)
+#define PL_utf8_idstart (vTHX->Iutf8_idstart)
+#define PL_utf8_mark (vTHX->Iutf8_mark)
+#define PL_utf8_perl_idcont (vTHX->Iutf8_perl_idcont)
+#define PL_utf8_perl_idstart (vTHX->Iutf8_perl_idstart)
+#define PL_utf8_tofold (vTHX->Iutf8_tofold)
+#define PL_utf8_tolower (vTHX->Iutf8_tolower)
+#define PL_utf8_tosimplefold (vTHX->Iutf8_tosimplefold)
+#define PL_utf8_totitle (vTHX->Iutf8_totitle)
+#define PL_utf8_toupper (vTHX->Iutf8_toupper)
+#define PL_utf8_xidcont (vTHX->Iutf8_xidcont)
+#define PL_utf8_xidstart (vTHX->Iutf8_xidstart)
#define PL_utf8cache (vTHX->Iutf8cache)
#define PL_utf8locale (vTHX->Iutf8locale)
#define PL_warn_locale (vTHX->Iwarn_locale)
@@ -344,40 +375,8 @@
#if defined(PERL_GLOBAL_STRUCT)
-#define PL_AboveLatin1 (my_vars->GAboveLatin1)
-#define PL_GAboveLatin1 (my_vars->GAboveLatin1)
-#define PL_Assigned_invlist (my_vars->GAssigned_invlist)
-#define PL_GAssigned_invlist (my_vars->GAssigned_invlist)
-#define PL_CCC_non0_non230 (my_vars->GCCC_non0_non230)
-#define PL_GCCC_non0_non230 (my_vars->GCCC_non0_non230)
#define PL_C_locale_obj (my_vars->GC_locale_obj)
#define PL_GC_locale_obj (my_vars->GC_locale_obj)
-#define PL_GCB_invlist (my_vars->GGCB_invlist)
-#define PL_GGCB_invlist (my_vars->GGCB_invlist)
-#define PL_HasMultiCharFold (my_vars->GHasMultiCharFold)
-#define PL_GHasMultiCharFold (my_vars->GHasMultiCharFold)
-#define PL_InBitmap (my_vars->GInBitmap)
-#define PL_GInBitmap (my_vars->GInBitmap)
-#define PL_InMultiCharFold (my_vars->GInMultiCharFold)
-#define PL_GInMultiCharFold (my_vars->GInMultiCharFold)
-#define PL_LB_invlist (my_vars->GLB_invlist)
-#define PL_GLB_invlist (my_vars->GLB_invlist)
-#define PL_Latin1 (my_vars->GLatin1)
-#define PL_GLatin1 (my_vars->GLatin1)
-#define PL_Posix_ptrs (my_vars->GPosix_ptrs)
-#define PL_GPosix_ptrs (my_vars->GPosix_ptrs)
-#define PL_Private_Use (my_vars->GPrivate_Use)
-#define PL_GPrivate_Use (my_vars->GPrivate_Use)
-#define PL_SB_invlist (my_vars->GSB_invlist)
-#define PL_GSB_invlist (my_vars->GSB_invlist)
-#define PL_SCX_invlist (my_vars->GSCX_invlist)
-#define PL_GSCX_invlist (my_vars->GSCX_invlist)
-#define PL_UpperLatin1 (my_vars->GUpperLatin1)
-#define PL_GUpperLatin1 (my_vars->GUpperLatin1)
-#define PL_WB_invlist (my_vars->GWB_invlist)
-#define PL_GWB_invlist (my_vars->GWB_invlist)
-#define PL_XPosix_ptrs (my_vars->GXPosix_ptrs)
-#define PL_GXPosix_ptrs (my_vars->GXPosix_ptrs)
#define PL_appctx (my_vars->Gappctx)
#define PL_Gappctx (my_vars->Gappctx)
#define PL_check (my_vars->Gcheck)
@@ -408,8 +407,6 @@
#define PL_Ghash_state (my_vars->Ghash_state)
#define PL_hints_mutex (my_vars->Ghints_mutex)
#define PL_Ghints_mutex (my_vars->Ghints_mutex)
-#define PL_in_some_fold (my_vars->Gin_some_fold)
-#define PL_Gin_some_fold (my_vars->Gin_some_fold)
#define PL_keyword_plugin (my_vars->Gkeyword_plugin)
#define PL_Gkeyword_plugin (my_vars->Gkeyword_plugin)
#define PL_keyword_plugin_mutex (my_vars->Gkeyword_plugin_mutex)
@@ -496,36 +493,8 @@
#define PL_Guser_def_props_aTHX (my_vars->Guser_def_props_aTHX)
#define PL_user_prop_mutex (my_vars->Guser_prop_mutex)
#define PL_Guser_prop_mutex (my_vars->Guser_prop_mutex)
-#define PL_utf8_charname_begin (my_vars->Gutf8_charname_begin)
-#define PL_Gutf8_charname_begin (my_vars->Gutf8_charname_begin)
-#define PL_utf8_charname_continue (my_vars->Gutf8_charname_continue)
-#define PL_Gutf8_charname_continue (my_vars->Gutf8_charname_continue)
#define PL_utf8_foldclosures (my_vars->Gutf8_foldclosures)
#define PL_Gutf8_foldclosures (my_vars->Gutf8_foldclosures)
-#define PL_utf8_idcont (my_vars->Gutf8_idcont)
-#define PL_Gutf8_idcont (my_vars->Gutf8_idcont)
-#define PL_utf8_idstart (my_vars->Gutf8_idstart)
-#define PL_Gutf8_idstart (my_vars->Gutf8_idstart)
-#define PL_utf8_mark (my_vars->Gutf8_mark)
-#define PL_Gutf8_mark (my_vars->Gutf8_mark)
-#define PL_utf8_perl_idcont (my_vars->Gutf8_perl_idcont)
-#define PL_Gutf8_perl_idcont (my_vars->Gutf8_perl_idcont)
-#define PL_utf8_perl_idstart (my_vars->Gutf8_perl_idstart)
-#define PL_Gutf8_perl_idstart (my_vars->Gutf8_perl_idstart)
-#define PL_utf8_tofold (my_vars->Gutf8_tofold)
-#define PL_Gutf8_tofold (my_vars->Gutf8_tofold)
-#define PL_utf8_tolower (my_vars->Gutf8_tolower)
-#define PL_Gutf8_tolower (my_vars->Gutf8_tolower)
-#define PL_utf8_tosimplefold (my_vars->Gutf8_tosimplefold)
-#define PL_Gutf8_tosimplefold (my_vars->Gutf8_tosimplefold)
-#define PL_utf8_totitle (my_vars->Gutf8_totitle)
-#define PL_Gutf8_totitle (my_vars->Gutf8_totitle)
-#define PL_utf8_toupper (my_vars->Gutf8_toupper)
-#define PL_Gutf8_toupper (my_vars->Gutf8_toupper)
-#define PL_utf8_xidcont (my_vars->Gutf8_xidcont)
-#define PL_Gutf8_xidcont (my_vars->Gutf8_xidcont)
-#define PL_utf8_xidstart (my_vars->Gutf8_xidstart)
-#define PL_Gutf8_xidstart (my_vars->Gutf8_xidstart)
#define PL_veto_cleanup (my_vars->Gveto_cleanup)
#define PL_Gveto_cleanup (my_vars->Gveto_cleanup)
#define PL_watch_pvx (my_vars->Gwatch_pvx)