--- deliantra/Deliantra-Client/DC/DB.pm 2008/07/18 22:40:51 1.38 +++ deliantra/Deliantra-Client/DC/DB.pm 2009/01/04 10:22:19 1.42 @@ -20,6 +20,7 @@ use File::Path (); use Carp (); use Storable (); +use AnyEvent::Util (); use Config; use BDB; @@ -29,6 +30,8 @@ our $DBDIR = "client-" . BDB::VERSION_MAJOR . "." . BDB::VERSION_MINOR . "-$Config{archname}"; our $DB_HOME = "$Deliantra::VARDIR/$DBDIR"; +sub FIRST_TILE_ID () { 64 } + unless (-d $DB_HOME) { if (-d "$Deliantra::VARDIR/$ODBDIR") { rename "$Deliantra::VARDIR/$ODBDIR", $DB_HOME; @@ -59,7 +62,13 @@ $env->set_msgfile (\*STDERR); $env->set_verbose (-1, 1); - $env->set_flags (BDB::AUTO_COMMIT | BDB::LOG_AUTOREMOVE | BDB::TXN_WRITE_NOSYNC); + $env->set_flags (BDB::AUTO_COMMIT | BDB::REGION_INIT); + $env->set_flags (&BDB::LOG_AUTOREMOVE ) if BDB::VERSION v0, v4.7; + $env->log_set_config (&BDB::LOG_AUTO_REMOVE) if BDB::VERSION v4.7; + + $env->set_timeout (3, BDB::SET_TXN_TIMEOUT); + $env->set_timeout (3, BDB::SET_LOCK_TIMEOUT); + $env->set_cachesize (0, 2048 * 1024, 0); db_env_open $env, $DB_HOME, @@ -79,6 +88,9 @@ $table =~ s/([^a-zA-Z0-9_\-])/sprintf "=%x=", ord $1/ge; + $DB_ENV#d# + or return ::clienterror ("trying to create table $_[0] with empty db_env $DB_ENV" => 1);#d# + my $db = db_create $DB_ENV; $db->set_flags (BDB::CHKSUM); @@ -152,7 +164,7 @@ unless ($TILE_SEQ) { $TILE_SEQ = $table->sequence; - $TILE_SEQ->initial_value (64); + $TILE_SEQ->initial_value (FIRST_TILE_ID); $TILE_SEQ->set_cachesize (0); db_sequence_open $TILE_SEQ, undef, "id", BDB::CREATE; } @@ -346,7 +358,8 @@ } sub run { - ($FH, my $fh) = DC::socketpipe; + ($FH, my $fh) = AnyEvent::Util::portable_socketpair + or die "unable to create database socketpair: $!"; my $oldfh = select $FH; $| = 1; select $oldfh; my $oldfh = select $fh; $| = 1; select $oldfh;