Use shared memory for sv_debug_file
authorFather Chrysostomos <sprout@cpan.org>
Sun, 4 Nov 2012 00:54:48 +0000 (17:54 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Mon, 5 Nov 2012 06:45:32 +0000 (22:45 -0800)
commit484e61088c41ed37ff05a1038f16c67b3c4b3323
treef0bfd5b221705adfec801a9b15678f6d520ce56a
parent1e5f02b39a83c2923bcd16343fa6a8ca8ea215f2
Use shared memory for sv_debug_file

With -DDEBUGGING -Accflags=-DDEBUG_LEAKING_SCALARS -Duseithreads:

use threads;
use threads::shared;
my @shared_ary :shared;
$shared_ary[0] = &threads::shared::share({});
@shared_ary = ();
__END__
panic: free from wrong pool, 881c00!=800000.
Scalars leaked: 1

threads::shared has to juggle multiple interpreters.  Sometimes the
interpreter it is calling into (and passing as the first argument
via pTHX) is not actually the current thread as far as the OS is
concerned.

Perl_safesysfree in util.c does not take a pTHX parameter, so it
fetches the current interpreter from the data associated with the cur-
rent thread.

The result is that PERL_TRACK_MEMPOOL complains that the file name
associated with an SV under DEBUG_LEAKING_SCALARS is being freed from
the wrong interpreter.

Using shared memory for the file name solves the issue.
sv.c