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.504 by root, Sat Jan 30 23:50:16 2010 UTC vs.
Revision 1.505 by root, Sun Jan 31 03:46:20 2010 UTC

1399 . "\n};\n1"; 1399 . "\n};\n1";
1400 1400
1401 $todo{$base} = \%ext; 1401 $todo{$base} = \%ext;
1402 } 1402 }
1403 1403
1404 my $pass = 0;
1404 my %done; 1405 my %done;
1405 while (%todo) { 1406 while (%todo) {
1406 my $progress; 1407 my $progress;
1407 1408
1409 ++$pass;
1410
1411 ext:
1408 while (my ($k, $v) = each %todo) { 1412 while (my ($k, $v) = each %todo) {
1409 for (split /,\s*/, $v->{meta}{depends}) { 1413 for (split /,\s*/, $v->{meta}{depends}) {
1410 goto skip 1414 next ext
1411 unless exists $done{$_}; 1415 unless exists $done{$_};
1412 } 1416 }
1413 1417
1414 warn "... loading '$k' into '$v->{pkg}'\n"; 1418 warn "... pass $pass, loading '$k' into '$v->{pkg}'\n";
1415 1419
1416 unless (eval $v->{source}) { 1420 my $active = eval $v->{source};
1421
1422 if (length $@) {
1417 my $msg = $@ ? "$v->{path}: $@\n" 1423 warn "$v->{path}: $@\n";
1418 : "$v->{base}: extension inactive.\n";
1419 1424
1420 if (exists $v->{meta}{mandatory}) {
1421 warn $msg;
1422 cf::cleanup "mandatory extension failed to load, exiting."; 1425 cf::cleanup "mandatory extension '$k' failed to load, exiting."
1423 } 1426 if exists $v->{meta}{mandatory};
1424 1427 } else {
1425 warn $msg; 1428 $done{$k} = delete $todo{$k};
1429 push @EXTS, $v->{pkg};
1430 $progress = 1;
1431
1432 warn "$v->{base}: extension inactive.\n"
1433 unless $active;
1426 } 1434 }
1427
1428 $done{$k} = delete $todo{$k};
1429 push @EXTS, $v->{pkg};
1430 $progress = 1;
1431 } 1435 }
1432 1436
1433 skip: 1437 unless ($progress) {
1434 die "cannot load " . (join ", ", keys %todo) . ": unable to resolve dependencies\n" 1438 warn "cannot load " . (join ", ", keys %todo) . ": unable to resolve dependencies\n";
1435 unless $progress; 1439
1440 while (my ($k, $v) = each %todo) {
1441 cf::cleanup "mandatory extension '$k' has unresolved dependencies, exiting."
1442 if exists $v->{meta}{mandatory};
1443 }
1444 }
1436 } 1445 }
1437 }; 1446 };
1438} 1447}
1439 1448
1440############################################################################# 1449#############################################################################
3571 3580
3572 IO::AIO::aio_utime $RUNTIMEFILE, undef, undef; 3581 IO::AIO::aio_utime $RUNTIMEFILE, undef, undef;
3573 3582
3574 my $guard = cf::lock_acquire "write_runtime"; 3583 my $guard = cf::lock_acquire "write_runtime";
3575 3584
3576 my $fh = aio_open "$RUNTIMEFILE~", O_WRONLY | O_CREAT, 0644 3585 my $fh = aio_open "$RUNTIMEFILE~", O_WRONLY | O_CREAT | O_TRUNC, 0644
3577 or return; 3586 or return;
3578 3587
3579 my $value = $cf::RUNTIME + 90 + 10; 3588 my $value = $cf::RUNTIME + 90 + 10;
3580 # 10 is the runtime save interval, for a monotonic clock 3589 # 10 is the runtime save interval, for a monotonic clock
3581 # 60 allows for the watchdog to kill the server. 3590 # 60 allows for the watchdog to kill the server.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines