=head1 NAME Coro::BDB - truly asynchronous bdb access =head1 SYNOPSIS use BDB; use Coro::BDB; # can now use any of the bdb requests =head1 DESCRIPTION This module is an L user, you need to make sure that you use and run a supported event loop. This module implements a thin wrapper around the L module. Each BDB request that could block and doesn't get passed a callback will normally block all coroutines. after loading this module, this will no longer be the case. It will also register an AnyEvent handler as soon as AnyEvent chooses an event loop. This module does not export anything (unlike L), as BDB already supports leaving out the callback. The AnyEvent watcher can be disabled by executing C. Please notify the author of when and why you think this was necessary. =over 4 =cut package Coro::BDB; no warnings; use strict; use Coro (); use AnyEvent (); use BDB (); use base Exporter::; our $VERSION = 4.6; our $WATCHER; $WATCHER = AnyEvent::post_detect { if ($AnyEvent::MODEL eq "AnyEvent::Impl::EV") { $WATCHER = EV::io (BDB::poll_fileno, &EV::READ, \&BDB::poll_cb); } else { our $FH; open $FH, "<&=" . BDB::poll_fileno; $WATCHER = AnyEvent->io (fh => $FH, poll => 'r', cb => \&BDB::poll_cb); } }; BDB::set_sync_prepare { my $status; my $current = $Coro::current; ( sub { $status = $!; $current->ready; undef $current; }, sub { Coro::schedule while defined $current; $! = $status; }, ) }; =back =head1 SEE ALSO L of course. =head1 AUTHOR Marc Lehmann http://home.schmorp.de/ =cut 1