This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Stop string eval from leaking ops
authorFather Chrysostomos <sprout@cpan.org>
Fri, 2 Nov 2012 19:35:25 +0000 (12:35 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 2 Nov 2012 19:35:25 +0000 (12:35 -0700)
commita577af66bcfd9e2196e6de9a29cda9fd20b50841
tree7447db5d4d0898579de40d4ab123cc2dea002ef8
parentc7bd8b847014f9a4cd5fa4bcf968ab4a8e11d2fe
Stop string eval from leaking ops

This was leaking:

$ ./miniperl  -Xe 'warn $$; while(1){eval "ok 8"};'
1915 at -e line 1.
^C

This was not:

$ ./miniperl  -Xe 'warn $$; while(1){eval "sub {ok 8}"};'
1916 at -e line 1.
^C

The sub is successfully taking care of its ops when it is freed.  The
eval is not.

I made the mistake of having the CV relinquish ownership of the op
slab after an eval syntax error.  That’s precisely the situation in
which the ops are likely to leak, and for which the slab allocator was
designed.  Duh.
pp_ctl.c
t/op/svleak.t