ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/lib/cf.pm
(Generate patch)

Comparing deliantra/server/lib/cf.pm (file contents):
Revision 1.431 by elmex, Sun May 4 19:27:27 2008 UTC vs.
Revision 1.434 by root, Thu May 29 03:27:37 2008 UTC

25use strict; 25use strict;
26 26
27use Symbol; 27use Symbol;
28use List::Util; 28use List::Util;
29use Socket; 29use Socket;
30use EV 3.2; 30use EV;
31use Opcode; 31use Opcode;
32use Safe; 32use Safe;
33use Safe::Hole; 33use Safe::Hole;
34use Storable (); 34use Storable ();
35 35
36use Coro 4.50 (); 36use Coro ();
37use Coro::State; 37use Coro::State;
38use Coro::Handle; 38use Coro::Handle;
39use Coro::EV; 39use Coro::AnyEvent;
40use Coro::Timer; 40use Coro::Timer;
41use Coro::Signal; 41use Coro::Signal;
42use Coro::Semaphore; 42use Coro::Semaphore;
43use Coro::AnyEvent;
43use Coro::AIO; 44use Coro::AIO;
44use Coro::BDB; 45use Coro::BDB;
45use Coro::Storable; 46use Coro::Storable;
46use Coro::Util (); 47use Coro::Util ();
47 48
49use BDB (); 50use BDB ();
50use Data::Dumper; 51use Data::Dumper;
51use Digest::MD5; 52use Digest::MD5;
52use Fcntl; 53use Fcntl;
53use YAML (); 54use YAML ();
54use IO::AIO 2.51 (); 55use IO::AIO ();
55use Time::HiRes; 56use Time::HiRes;
56use Compress::LZF; 57use Compress::LZF;
57use Digest::MD5 (); 58use Digest::MD5 ();
59
60AnyEvent::detect;
61
62IO::AIO::max_poll_reqs 1;#d#
58 63
59# configure various modules to our taste 64# configure various modules to our taste
60# 65#
61$Storable::canonical = 1; # reduce rsync transfers 66$Storable::canonical = 1; # reduce rsync transfers
62Coro::State::cctx_stacksize 256000; # 1-2MB stack, for deep recursions in maze generator 67Coro::State::cctx_stacksize 256000; # 1-2MB stack, for deep recursions in maze generator
90our $RANDOMDIR = "$LOCALDIR/random"; 95our $RANDOMDIR = "$LOCALDIR/random";
91our $BDBDIR = "$LOCALDIR/db"; 96our $BDBDIR = "$LOCALDIR/db";
92our %RESOURCE; 97our %RESOURCE;
93 98
94our $TICK = MAX_TIME * 1e-6; # this is a CONSTANT(!) 99our $TICK = MAX_TIME * 1e-6; # this is a CONSTANT(!)
95our $AIO_POLL_WATCHER;
96our $NEXT_RUNTIME_WRITE; # when should the runtime file be written 100our $NEXT_RUNTIME_WRITE; # when should the runtime file be written
97our $NEXT_TICK; 101our $NEXT_TICK;
98our $USE_FSYNC = 1; # use fsync to write maps - default off 102our $USE_FSYNC = 1; # use fsync to write maps - default off
99 103
100our $BDB_POLL_WATCHER;
101our $BDB_DEADLOCK_WATCHER; 104our $BDB_DEADLOCK_WATCHER;
102our $BDB_CHECKPOINT_WATCHER; 105our $BDB_CHECKPOINT_WATCHER;
103our $BDB_TRICKLE_WATCHER; 106our $BDB_TRICKLE_WATCHER;
104our $DB_ENV; 107our $DB_ENV;
105 108
1523 $pl->{deny_save} = 1; 1526 $pl->{deny_save} = 1;
1524 $pl->password ("*"); # this should lock out the player until we nuked the dir 1527 $pl->password ("*"); # this should lock out the player until we nuked the dir
1525 1528
1526 $pl->invoke (cf::EVENT_PLAYER_LOGOUT, 1) if $pl->active; 1529 $pl->invoke (cf::EVENT_PLAYER_LOGOUT, 1) if $pl->active;
1527 $pl->deactivate; 1530 $pl->deactivate;
1531 my $killer = cf::arch::get "killer_quit"; $pl->killer ($killer); $killer->destroy;
1532 $pl->ob->check_score;
1528 $pl->invoke (cf::EVENT_PLAYER_QUIT); 1533 $pl->invoke (cf::EVENT_PLAYER_QUIT);
1529 $pl->ns->destroy if $pl->ns; 1534 $pl->ns->destroy if $pl->ns;
1530 1535
1531 my $path = playerdir $pl; 1536 my $path = playerdir $pl;
1532 my $temp = "$path~$cf::RUNTIME~deleting~"; 1537 my $temp = "$path~$cf::RUNTIME~deleting~";
3434 reload_config; 3439 reload_config;
3435 db_init; 3440 db_init;
3436 load_extensions; 3441 load_extensions;
3437 3442
3438 $Coro::current->prio (Coro::PRIO_MAX); # give the main loop max. priority 3443 $Coro::current->prio (Coro::PRIO_MAX); # give the main loop max. priority
3439 evthread_start IO::AIO::poll_fileno;
3440 } 3444 }
3441 3445
3442 EV::loop; 3446 EV::loop;
3443} 3447}
3444 3448
3785{ 3789{
3786 # configure BDB 3790 # configure BDB
3787 3791
3788 BDB::min_parallel 8; 3792 BDB::min_parallel 8;
3789 BDB::max_poll_reqs $TICK * 0.1; 3793 BDB::max_poll_reqs $TICK * 0.1;
3790 $Coro::BDB::WATCHER->priority (1); 3794 $AnyEvent::BDB::WATCHER->priority (1);
3791 3795
3792 unless ($DB_ENV) { 3796 unless ($DB_ENV) {
3793 $DB_ENV = BDB::db_env_create; 3797 $DB_ENV = BDB::db_env_create;
3794 $DB_ENV->set_flags (BDB::AUTO_COMMIT | BDB::REGION_INIT | BDB::TXN_NOSYNC 3798 $DB_ENV->set_flags (BDB::AUTO_COMMIT | BDB::REGION_INIT | BDB::TXN_NOSYNC
3795 | BDB::LOG_AUTOREMOVE, 1); 3799 | BDB::LOG_AUTOREMOVE, 1);
3826{ 3830{
3827 # configure IO::AIO 3831 # configure IO::AIO
3828 3832
3829 IO::AIO::min_parallel 8; 3833 IO::AIO::min_parallel 8;
3830 IO::AIO::max_poll_time $TICK * 0.1; 3834 IO::AIO::max_poll_time $TICK * 0.1;
3831 $Coro::AIO::WATCHER->priority (1); 3835 #undef $AnyEvent::AIO::WATCHER;
3832} 3836}
3833 3837
3834my $_log_backtrace; 3838my $_log_backtrace;
3835 3839
3836sub _log_backtrace { 3840sub _log_backtrace {
3874# load additional modules 3878# load additional modules
3875use cf::pod; 3879use cf::pod;
3876 3880
3877END { cf::emergency_save } 3881END { cf::emergency_save }
3878 3882
3883evthread_start IO::AIO::poll_fileno;
3884
38791 38851
3880 3886

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines