Skip Menu |

This queue is for tickets about the Pod-Coverage CPAN distribution.

Report information
The Basics
Id: 17489
Status: resolved
Priority: 0/
Queue: Pod-Coverage

People
Owner: Nobody in particular
Requestors: dagolden [...] cpan.org
Cc:
AdminCc:

Bug Information
Severity: Normal
Broken in:
  • 0.07
  • 0.08
  • 0.09
  • 0.10
  • 0.11
  • 0.12
  • 0.13
  • 0.14
  • 0.15
  • 0.16
  • 0.17
Fixed in: (no value)



Subject: Add CLONE and CLONE_SKIP to default list of private functions
As of Perl 5.8, the special CLONE method is used to allow package a hook into the thread-cloning process or CLONE_SKIP to avoid cloning. From perlmod ( http://perldoc.perl.org/perlmod.html ): Show quoted text
> Since 5.6.0, Perl has had support for a new type of threads called > interpreter threads (ithreads). These threads can be used explicitly and > implicitly. > > Ithreads work by cloning the data tree so that no data is shared between > different threads. These threads can be used by using the threads module > or by doing fork() on win32 (fake fork() support). When a thread is > cloned all Perl data is cloned, however non-Perl data cannot be cloned > automatically. Perl after 5.7.2 has support for the CLONE special > subroutine. In CLONE you can do whatever you need to do, like for > example handle the cloning of non-Perl data, if necessary. CLONE will be > called once as a class method for every package that has it defined (or > inherits it). It will be called in the context of the new thread, so all > modifications are made in the new area. Currently CLONE is called with > no parameters other than the invocant package name, but code should not > assume that this will remain unchanged, as it is likely that in future > extra parameters will be passed in to give more information about the > state of cloning. > > If you want to CLONE all objects you will need to keep track of them per > package. This is simply done using a hash and Scalar::Util::weaken(). > > Perl after 5.8.7 has support for the CLONE_SKIP special subroutine. Like > CLONE , CLONE_SKIP is called once per package; however, it is called > just before cloning starts, and in the context of the parent thread. If > it returns a true value, then no objects of that class will be cloned; > or rather, they will be copied as unblessed, undef values. This provides > a simple mechanism for making a module threadsafe; just add sub > CLONE_SKIP { 1 } at the top of the class, and DESTROY() will be now only > be called once per object. Of course, if the child thread needs to make > use of the objects, then a more sophisticated approach is needed. > > Like CLONE , CLONE_SKIP is currently called with no parameters other > than the invocant package name, although that may change. Similarly, to > allow for future expansion, the return value should be a single 0 or 1 > value.
Added for the next release -- Richard Clamp <richardc@unixbeard.net>