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.338 by root, Tue Aug 21 01:07:47 2007 UTC vs.
Revision 1.339 by root, Fri Aug 24 00:26:10 2007 UTC

1947} 1947}
1948 1948
1949sub do_load_sync { 1949sub do_load_sync {
1950 my ($map) = @_; 1950 my ($map) = @_;
1951 1951
1952 cf::LOG cf::llevDebug | cf::logBacktrace, "do_load_sync"
1953 if $Coro::current != $Coro::main;
1954
1952 cf::sync_job { $map->load }; 1955 cf::sync_job { $map->load };
1953} 1956}
1954 1957
1955our %MAP_PREFETCH; 1958our %MAP_PREFETCH;
1956our $MAP_PREFETCHER = undef; 1959our $MAP_PREFETCHER = undef;
1957 1960
1958sub find_async { 1961sub find_async {
1959 my ($path, $origin) = @_; 1962 my ($path, $origin, $load) = @_;
1960 1963
1961 $path = normalise $path, $origin && $origin->{path}; 1964 $path = normalise $path, $origin && $origin->{path};
1962 1965
1963 if (my $map = $cf::MAP{$path}) { 1966 if (my $map = $cf::MAP{$path}) {
1964 return $map if $map->in_memory == cf::MAP_IN_MEMORY; 1967 return $map if $map->in_memory == cf::MAP_IN_MEMORY;
1965 } 1968 }
1966 1969
1967 undef $MAP_PREFETCH{$path}; 1970 $MAP_PREFETCH{$path} |= $load;
1971
1968 $MAP_PREFETCHER ||= cf::async { 1972 $MAP_PREFETCHER ||= cf::async {
1969 while (%MAP_PREFETCH) { 1973 while (%MAP_PREFETCH) {
1970 for my $path (keys %MAP_PREFETCH) { 1974 while (my ($k, $v) = each %MAP_PREFETCH) {
1971 if (my $map = find $path) { 1975 if (my $map = find $k) {
1972 $map->load; 1976 $map->load if $v;
1973 } 1977 }
1974 1978
1975 delete $MAP_PREFETCH{$path}; 1979 delete $MAP_PREFETCH{$k};
1976 } 1980 }
1977 } 1981 }
1978 undef $MAP_PREFETCHER; 1982 undef $MAP_PREFETCHER;
1979 }; 1983 };
1980 $MAP_PREFETCHER->prio (6); 1984 $MAP_PREFETCHER->prio (6);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines