This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Move regex global variables to interpreter level
authorKarl Williamson <khw@cpan.org>
Mon, 25 Nov 2019 03:48:54 +0000 (20:48 -0700)
committerKarl Williamson <khw@cpan.org>
Wed, 27 Nov 2019 02:38:14 +0000 (19:38 -0700)
commita8def808210e08cea0b7889fea7c5146b21af4ed
tree40bd3017953f36bf853b7dec6c07e818d1d3588e
parente4b61f959ac649d109da4ede1fba8cfa793a79a4
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.
embedvar.h
intrpvar.h
perl.c
perlapi.h
perlvars.h
regcomp.c
sv.c