DBM-Deep

 view release on metacpan or  search on metacpan

lib/DBM/Deep.pm  view on Meta::CPAN

        my $e = $@;
        eval { local $SIG{'__DIE__'}; $self->unlock; };
        die $e;
    }

    if(  $self->{engine}->{external_refs}
     and my $sector = $self->{engine}->load_sector( $self->{base_offset} )
    ) {
        $sector->increment_refcount;

        Scalar::Util::weaken( my $feeble_ref = $self );
        $obj_cache{ $self } = \$feeble_ref;

        # Make sure this cache is not a memory hog
        if(!HAVE_HUFH) {
            for(keys %obj_cache) {
                delete $obj_cache{$_} if not ${$obj_cache{$_}};
            }
        }
    }

lib/DBM/Deep/Iterator.pm  view on Meta::CPAN


sub new {
    my $class = shift;
    my ($args) = @_;

    my $self = bless {
        engine      => $args->{engine},
        base_offset => $args->{base_offset},
    }, $class;

    Scalar::Util::weaken( $self->{engine} );

    $self->reset;

    return $self;
}

=head2 reset()

This method takes no arguments.

lib/DBM/Deep/Sector.pm  view on Meta::CPAN


use 5.008_004;

use strict;
use warnings FATAL => 'all';

use Scalar::Util ();

sub new {
    my $self = bless $_[1], $_[0];
    Scalar::Util::weaken( $self->{engine} );
    $self->_init;
    return $self;
}

sub _init {}

sub clone {
    my $self = shift;
    return ref($self)->new({
        engine => $self->engine,

lib/DBM/Deep/Sector/DBI/Reference.pm  view on Meta::CPAN

    my $obj;
    if ( !defined $cache->{ $off } ) {
        $obj = DBM::Deep->new({
            type        => $self->type,
            base_offset => $self->offset,
            storage     => $engine->storage,
            engine      => $engine,
        });

        $cache->{$off} = $obj;
        Scalar::Util::weaken($cache->{$off});
    }
    else {
        $obj = $cache->{$off};
    }

    # We're not exporting, so just return.
    unless ( $args->{export} ) {
        if ( $engine->storage->{autobless} ) {
            my $classname = $self->get_classname;
            if ( defined $classname ) {

lib/DBM/Deep/Sector/File/Reference.pm  view on Meta::CPAN

    if ( !defined $$cache_entry{ $trans_id } ) {
        $obj = DBM::Deep->new({
            type        => $self->type,
            base_offset => $self->offset,
            staleness   => $self->staleness,
            storage     => $engine->storage,
            engine      => $engine,
        });

        $$cache_entry{ $trans_id } = $obj;
        Scalar::Util::weaken($$cache_entry{ $trans_id });
    }
    else {
        $obj = $$cache_entry{ $trans_id };
    }

    # We're not exporting, so just return.
    unless ( $args->{export} ) {
        if ( $engine->storage->{autobless} ) {
            my $classname = $self->get_classname;
            if ( defined $classname ) {

t/52_memory_leak.t  view on Meta::CPAN

use common qw( new_dbm );

# RT #77746
my $dbm_factory = new_dbm();
while ( my $dbm_maker = $dbm_factory->() ) {
    my $db = $dbm_maker->();

    $db->{foo} = {};
    my $data = $db->{foo};

    use Scalar::Util 'weaken';
    weaken $db;
    weaken $data;

    is $db, undef, 'no $db after weakening';
    is $data, undef, 'hashes returned from db contain no circular refs';
}
    


# This was discussed here:
# http://groups.google.com/group/DBM-Deep/browse_thread/thread/a6b8224ffec21bab
# brought up by Alex Gallichotte

SKIP: {

utils/lib/DBM/Deep/10002.pm  view on Meta::CPAN

sub new {
    my $class = shift;
    my ($args) = @_;

    my $self = bless {
        breadcrumbs => [],
        engine      => $args->{engine},
        base_offset => $args->{base_offset},
    }, $class;

    Scalar::Util::weaken( $self->{engine} );

    return $self;
}

sub reset { $_[0]{breadcrumbs} = [] }

sub get_sector_iterator {
    my $self = shift;
    my ($loc) = @_;

utils/lib/DBM/Deep/10002.pm  view on Meta::CPAN

    }) or return;

    #XXX Do we want to add corruption checks here?
    return $self->{sector}->get_key_for( $idx )->data;
}

package DBM::Deep::10002::Engine::Sector;

sub new {
    my $self = bless $_[1], $_[0];
    Scalar::Util::weaken( $self->{engine} );
    $self->_init;
    return $self;
}

#sub _init {}
#sub clone { DBM::Deep::10002->_throw_error( "Must be implemented in the child class" ); }

sub engine { $_[0]{engine} }
sub offset { $_[0]{offset} }
sub type   { $_[0]{type} }



( run in 0.397 second using v1.01-cache-2.11-cpan-65fba6d93b7 )