--- deliantra/server/ext/map-tags.ext 2007/09/13 08:35:24 1.5 +++ deliantra/server/ext/map-tags.ext 2007/09/13 12:36:25 1.6 @@ -106,6 +106,31 @@ my $start = Event::time; # 1. check for maps no longer existing + { + my @delkeys; + + my $cursor = $db_mapinfo->cursor; + for (;;) { + BDB::db_c_get $cursor, my $key, my $data, BDB::NEXT; + last if $!; + + my $data = JSON::XS::from_json $data; + my ($ver, undef, undef, $path) = split /,/, $data->{hash}, 4; + push @delkeys, [$key, $data->{tags}] + if $ver != 1 || Coro::AIO::aio_stat $path; + } + BDB::db_c_close $cursor; + + for (@delkeys) { + my ($key, $tags) = @$_; + my $txn = $cf::DB_ENV->txn_begin; + BDB::db_del $db_mapinfo, $txn, $key; + for my $tag (@{ $tags || [] }) { + remove_tag_target $txn, $tag, $key; + } + BDB::db_txn_commit $txn; + } + } # 2. scan all static maps scan_static $cf::MAPDIR, "/";