Steven Lembark

NAME

Object::Wrapper::Fork -- Practice safe forks: use a hat.

SYNOPSIS

    pacakge My;

    # parent is lighter weight than base if it
    # is available.

    use parent qw( Object::Wrapper::Fork );

    sub cleanup
    {
        # validate 

        my ( $object, $pid ) = @_;

        if( $pid == $$ )
        {
            # clean up within same process
        }
        else
        {
            # clean up post-fork.
        }
    }

    sub new
    {
        # build the object Your Way. 
        # Object::Wrapper::Fork supplies the pid 
        # ($$) when wrapping and AUTOLOAD to 
        # validate it againsed the current pid.

        my $object  = UnforkSafe->new( @blah );

        __PACKAGE__->SUPER::new( $object )
    }

DESCRIPTION

Use Safe Forks: Wear a hat.

Any number of modules cannot gracefully handle re-use across forks. This module provides a simple wrapper that re-validates the pid on calls and calls a cleanup handler with the original PID when destroyed.

The bulk of the work is done in AUTOLOAD, which re-validates the pid and passes the original object by reference for each call made (i.e., modifications to the object via $_[0] are propagated).

DESTROY calls the wrapped object with its original pid, which can be compared to $$ for appropriate behavior. Passing the PID pback can simplify logging messages or help packages that track PID's.

Interface

new

This takes a reference to the object or package being wrapped and returns the wrapper. It would normaly be called from the wrapped objects constructor:

    sub Your::Constructor
    {
        my $proto   = shift;

        my $thingy  = $madness->$method( @argz );

        $proto->SUPER::new( $thingy )
    }

NOTES

Tied Objects

This will not handle tied objects gracefully. If you're into BSDM then you're out of luck here. Sorry.

SEE ALSO

Object::Wrapper

Generic constructor takes list of arguments added to the object for validation by its AUTOLOAD and cleanup methods.

Object::Wrapper::Fork::DBI

Fork wrapper for DBI database handles. Supplies a "connect" method and cleanup handler for dealing with CackedKids and InactiveDestroy vs. finish/disconnect.

AUTHOR

Steven Lembark <lembark@wrkhors.com>

COPYRIGHT

Copyright (C) 2009 Steven Lembark. This module is released under the same terms as Perl-5.10.0 itself.

1 POD Error

The following errors were encountered while parsing the POD:

Around line 139:

You forgot a '=back' before '=head1'




Hosting generously
sponsored by Bytemark