Revision: 983 Author: tim.bunce Date: Sun Dec 20 12:22:26 2009 Log: Limitations docs: Two steps forward, one step back. Removed Scope::Upper unwind and substcont limitations which are now fixed. Added "Freed values in @_ may be mutated"
http://code.google.com/p/perl-devel-nytprof/source/detail?r=983 Modified: /trunk/Makefile.PL /trunk/lib/Devel/NYTProf.pm ======================================= --- /trunk/Makefile.PL Fri Dec 18 09:04:28 2009 +++ /trunk/Makefile.PL Sun Dec 20 12:22:26 2009 @@ -205,7 +205,6 @@ # not dofile because it's an alias for require # (and causes problems like http://www.nntp.perl.org/group/perl.cpan.testers/2009/12/msg6409150.html) # not fork because it doesn't make much sense -# not substcont yet - needs more work XXX slowops:: $(NOECHO) $(PERL) -e 'require v5.10.0; # only regenerate with 5.10+ to get all ops' $(PERL) -MOpcode=opset_to_ops,opset \ ======================================= --- /trunk/lib/Devel/NYTProf.pm Thu Dec 10 07:29:00 2009 +++ /trunk/lib/Devel/NYTProf.pm Sun Dec 20 12:22:26 2009 @@ -624,18 +624,20 @@ The reporting code currently doesn't handle #line directives, but at least it warns about them. Patches welcome. -=head2 Scope::Upper unwind() - -NYTProf is currently incompatible with the deep magic performed by -Scope::Upper's unwind() function. As a partial workaround you can set the -C<subs=0:leave=0> options, but you won't get any subroutine timings. -See L<http://rt.cpan.org/Public/Bug/Display.html?id=50634> - -=head2 Slowops doesn't include all kinds of s/// substitutions - -Currently the C<substcont> opcode isn't profiled. This means that substitutions -using variables in the replacement string, or that use the C</e> modifier, -are not fully profiled. +=head2 Freed values in @_ may be mutated + +Perl has a class of bugs related to the fact that values placed in the stack +are not reference counted. Consider this example: + + @a = (1..9); sub s { undef @a; print $_ for @_ } s(@a); + +The C<undef @a> frees the values that C<@_> refers to. Perl can sometimes +detect when a freed value is accessed and treats it as an undef. However, if +the freed value is assigned some new value then @_ is effectively corrupted. + +NYTProf allocates new values while it's profiling, in order to record program +activity, and so may appear to corrupt C<@_> in this (rare) situation. If this +happens, NYTProf is simply exposing an existing problem in the code. =head1 CLOCKS -- You've received this message because you are subscribed to the Devel::NYTProf Development User group. Group hosted at: http://groups.google.com/group/develnytprof-dev Project hosted at: http://perl-devel-nytprof.googlecode.com CPAN distribution: http://search.cpan.org/dist/Devel-NYTProf To post, email: [email protected] To unsubscribe, email: [email protected]
