Fix some lock ordering issues
This commit is contained in:
parent
d621528bb8
commit
357c695a3a
|
@ -19,7 +19,6 @@ pub struct ChunkBuilder {
|
|||
built_recv: mpsc::Receiver<(usize, BuildReply)>,
|
||||
|
||||
models: Arc<RwLock<model::Factory>>,
|
||||
resources: Arc<RwLock<resources::Manager>>,
|
||||
resource_version: usize,
|
||||
}
|
||||
|
||||
|
@ -43,16 +42,14 @@ impl ChunkBuilder {
|
|||
free_builders: free,
|
||||
built_recv: built_recv,
|
||||
models: models,
|
||||
resources: resources.clone(),
|
||||
resource_version: 0xFFFF,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn tick(&mut self, world: &mut world::World, renderer: &mut render::Renderer, _delta: f64) {
|
||||
pub fn tick(&mut self, world: &mut world::World, renderer: &mut render::Renderer, version: usize) {
|
||||
{
|
||||
let rm = self.resources.read().unwrap();
|
||||
if rm.version() != self.resource_version {
|
||||
self.resource_version = rm.version();
|
||||
if version != self.resource_version {
|
||||
self.resource_version = version;
|
||||
self.models.write().unwrap().version_change();
|
||||
}
|
||||
}
|
||||
|
|
10
src/main.rs
10
src/main.rs
|
@ -218,9 +218,11 @@ fn main() {
|
|||
|
||||
let mut events = sdl.event_pump().unwrap();
|
||||
while !game.should_close {
|
||||
{
|
||||
game.resource_manager.write().unwrap().tick();
|
||||
}
|
||||
let version = {
|
||||
let mut res = game.resource_manager.write().unwrap();
|
||||
res.tick();
|
||||
res.version()
|
||||
};
|
||||
|
||||
let now = time::now();
|
||||
let diff = now - last_frame;
|
||||
|
@ -233,7 +235,7 @@ fn main() {
|
|||
|
||||
game.renderer.update_camera(width, height);
|
||||
game.server.world.compute_render_list(&mut game.renderer);
|
||||
game.chunk_builder.tick(&mut game.server.world, &mut game.renderer, delta);
|
||||
game.chunk_builder.tick(&mut game.server.world, &mut game.renderer, version);
|
||||
|
||||
game.screen_sys.tick(delta, &mut game.renderer, &mut ui_container);
|
||||
game.console
|
||||
|
|
|
@ -41,14 +41,16 @@ impl Logo {
|
|||
}
|
||||
|
||||
fn init(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container) {
|
||||
let res = self.resources.read().unwrap();
|
||||
|
||||
let mut logo = res.open("steven", "logo/logo.txt").unwrap();
|
||||
let mut logo_str = String::new();
|
||||
logo.read_to_string(&mut logo_str).unwrap();
|
||||
let logo_str = {
|
||||
let res = self.resources.read().unwrap();
|
||||
let mut logo = res.open("steven", "logo/logo.txt").unwrap();
|
||||
let mut logo_str = String::new();
|
||||
logo.read_to_string(&mut logo_str).unwrap();
|
||||
logo_str
|
||||
};
|
||||
|
||||
let solid = render::Renderer::get_texture(renderer.get_textures_ref(), "steven:solid");
|
||||
let stone = render::Renderer::get_texture(renderer.get_textures_ref(), "blocks/planks_oak");
|
||||
let front = render::Renderer::get_texture(renderer.get_textures_ref(), "blocks/planks_oak");
|
||||
|
||||
let mut shadow_batch = ui::Batch::new(0.0, 8.0, 100.0, 100.0);
|
||||
let mut layer0 = ui::Batch::new(0.0, 8.0, 100.0, 100.0);
|
||||
|
@ -88,7 +90,7 @@ impl Logo {
|
|||
shadow_batch.add(shadow);
|
||||
|
||||
|
||||
let img = ui::Image::new(stone.clone(),
|
||||
let img = ui::Image::new(front.clone(),
|
||||
x as f64,
|
||||
y as f64,
|
||||
4.0,
|
||||
|
@ -111,6 +113,7 @@ impl Logo {
|
|||
row += 1;
|
||||
}
|
||||
{
|
||||
let res = self.resources.read().unwrap();
|
||||
let mut splashes = res.open_all("minecraft", "texts/splashes.txt");
|
||||
for file in &mut splashes {
|
||||
let mut texts = String::new();
|
||||
|
|
Loading…
Reference in New Issue