ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/Coro/BDB.pm
Revision: 1.15
Committed: Wed Jul 23 22:15:25 2008 UTC (15 years, 10 months ago) by root
Branch: MAIN
CVS Tags: rel-4_745
Changes since 1.14: +1 -1 lines
Log Message:
4.745

File Contents

# Content
1 =head1 NAME
2
3 Coro::BDB - truly asynchronous bdb access
4
5 =head1 SYNOPSIS
6
7 use Coro::BDB;
8 use BDB;
9
10 # can now use any of the bdb requests
11
12 =head1 DESCRIPTION
13
14 This module is an L<AnyEvent> user, you need to make sure that you use and
15 run a supported event loop.
16
17 This module implements a thin wrapper around the L<BDB> module: Each BDB
18 request that could block and doesn't get passed a callback will normally
19 block all coroutines. after loading this module, this will no longer be
20 the case (it provides a suitable sync prepare callback).
21
22 It will also register an AnyEvent watcher as soon as AnyEvent chooses an
23 event loop.
24
25 The AnyEvent watcher can be disabled by executing C<undef
26 $Coro::BDB::WATCHER>. Please notify the author of when and why you think
27 this was necessary.
28
29 This module does not export anything (unlike L<Coro::AIO>), as BDB already
30 supports leaving out the callback.
31
32 =over 4
33
34 =cut
35
36 package Coro::BDB;
37
38 no warnings;
39 use strict;
40
41 use Coro ();
42 use AnyEvent::BDB ();
43 use BDB ();
44
45 use base Exporter::;
46
47 our $VERSION = 4.745;
48 our $WATCHER;
49
50 BDB::set_sync_prepare {
51 my $status;
52 my $current = $Coro::current;
53 (
54 sub {
55 $status = $!;
56 $current->ready; undef $current;
57 },
58 sub {
59 Coro::schedule while defined $current;
60 $! = $status;
61 },
62 )
63 };
64
65 =back
66
67 =head1 SEE ALSO
68
69 L<BDB> of course.
70
71 =head1 AUTHOR
72
73 Marc Lehmann <schmorp@schmorp.de>
74 http://home.schmorp.de/
75
76 =cut
77
78 1