… | |
… | |
16 | use Coro::Event; |
16 | use Coro::Event; |
17 | use Coro::Timer; |
17 | use Coro::Timer; |
18 | use Coro::Signal; |
18 | use Coro::Signal; |
19 | use Coro::Semaphore; |
19 | use Coro::Semaphore; |
20 | use Coro::AIO; |
20 | use Coro::AIO; |
|
|
21 | use Coro::Storable; |
21 | |
22 | |
22 | use BDB (); |
23 | use BDB (); |
23 | use Data::Dumper; |
24 | use Data::Dumper; |
24 | use Digest::MD5; |
25 | use Digest::MD5; |
25 | use Fcntl; |
26 | use Fcntl; |
… | |
… | |
28 | use Time::HiRes; |
29 | use Time::HiRes; |
29 | use Compress::LZF; |
30 | use Compress::LZF; |
30 | |
31 | |
31 | # configure various modules to our taste |
32 | # configure various modules to our taste |
32 | # |
33 | # |
|
|
34 | $Storable::canonical = 1; # reduce rsync transfers |
33 | Coro::State::cctx_stacksize 256000; # 1-2MB stack, for deep recursions in maze generator |
35 | Coro::State::cctx_stacksize 256000; # 1-2MB stack, for deep recursions in maze generator |
34 | Compress::LZF::sfreeze_cr { }; # prime Compress::LZF so it does not use require later |
36 | Compress::LZF::sfreeze_cr { }; # prime Compress::LZF so it does not use require later |
35 | |
37 | |
36 | $Event::Eval = 1; # no idea why this is required, but it is |
38 | $Event::Eval = 1; # no idea why this is required, but it is |
37 | |
39 | |
… | |
… | |
2311 | |
2313 | |
2312 | my $facedata; |
2314 | my $facedata; |
2313 | 0 < aio_load $path, $facedata |
2315 | 0 < aio_load $path, $facedata |
2314 | or die "$path: $!"; |
2316 | or die "$path: $!"; |
2315 | |
2317 | |
2316 | Coro::cede; |
|
|
2317 | $facedata = Storable::thaw $facedata; |
2318 | $facedata = Coro::Storable::thaw $facedata; |
2318 | Coro::cede; |
|
|
2319 | |
2319 | |
2320 | $facedata->{version} == 2 |
2320 | $facedata->{version} == 2 |
2321 | or cf::cleanup "$path: version mismatch, cannot proceed."; |
2321 | or cf::cleanup "$path: version mismatch, cannot proceed."; |
2322 | |
2322 | |
2323 | { |
2323 | { |