From 357c695a3ad19fdeb17acec32e1ae8ebc92dbfcb Mon Sep 17 00:00:00 2001 From: Thinkofname Date: Tue, 29 Mar 2016 20:53:41 +0100 Subject: [PATCH] Fix some lock ordering issues --- src/chunk_builder.rs | 9 +++------ src/main.rs | 10 ++++++---- src/ui/logo.rs | 17 ++++++++++------- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/chunk_builder.rs b/src/chunk_builder.rs index 6dd8ad3..2888306 100644 --- a/src/chunk_builder.rs +++ b/src/chunk_builder.rs @@ -19,7 +19,6 @@ pub struct ChunkBuilder { built_recv: mpsc::Receiver<(usize, BuildReply)>, models: Arc>, - resources: Arc>, 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(); } } diff --git a/src/main.rs b/src/main.rs index 8946bfd..2d15a73 100644 --- a/src/main.rs +++ b/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 diff --git a/src/ui/logo.rs b/src/ui/logo.rs index 445dd75..8efa10c 100644 --- a/src/ui/logo.rs +++ b/src/ui/logo.rs @@ -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();