Просмотр исходного кода

wallet: fix fatal crash in gfx subsystem when gfx random u32 IDs conflict. Now use a simple incrementing AtomicU32 instead.

darkfi 1 год назад
Родитель
Сommit
1d3f07e6c5
2 измененных файлов с 14 добавлено и 7 удалено
  1. 13 7
      bin/darkwallet/src/gfx/mod.rs
  2. 1 0
      bin/darkwallet/src/plugin/darkirc.rs

+ 13 - 7
bin/darkwallet/src/gfx/mod.rs

@@ -30,7 +30,10 @@ use std::{
     collections::HashMap,
     fs::File,
     path::PathBuf,
-    sync::{mpsc, Arc, Mutex as SyncMutex},
+    sync::{
+        atomic::{AtomicU32, Ordering},
+        mpsc, Arc, Mutex as SyncMutex,
+    },
     time::{Duration, Instant},
 };
 
@@ -45,9 +48,6 @@ use crate::{
     util::ansi_texture,
 };
 
-pub type GfxTextureId = u32;
-pub type GfxBufferId = u32;
-
 // This is very noisy so suppress output by default
 const DEBUG_RENDER: bool = false;
 const DEBUG_GFXAPI: bool = false;
@@ -79,6 +79,12 @@ impl Vertex {
     }
 }
 
+pub type GfxTextureId = u32;
+pub type GfxBufferId = u32;
+
+static NEXT_BUFFER_ID: AtomicU32 = AtomicU32::new(0);
+static NEXT_TEXTURE_ID: AtomicU32 = AtomicU32::new(0);
+
 pub type ManagedTexturePtr = Arc<ManagedTexture>;
 
 /// Auto-deletes texture on drop
@@ -136,7 +142,7 @@ impl RenderApi {
     }
 
     fn new_unmanaged_texture(&self, width: u16, height: u16, data: Vec<u8>) -> GfxTextureId {
-        let gfx_texture_id = rand::random();
+        let gfx_texture_id = NEXT_TEXTURE_ID.fetch_add(1, Ordering::SeqCst);
 
         let method = GraphicsMethod::NewTexture((width, height, data, gfx_texture_id));
         let _ = self.method_req.send(method);
@@ -169,7 +175,7 @@ impl RenderApi {
     }
 
     fn new_unmanaged_vertex_buffer(&self, verts: Vec<Vertex>) -> GfxBufferId {
-        let gfx_buffer_id = rand::random();
+        let gfx_buffer_id = NEXT_BUFFER_ID.fetch_add(1, Ordering::SeqCst);
 
         let method = GraphicsMethod::NewVertexBuffer((verts, gfx_buffer_id));
         let _ = self.method_req.send(method);
@@ -178,7 +184,7 @@ impl RenderApi {
     }
 
     fn new_unmanaged_index_buffer(&self, indices: Vec<u16>) -> GfxBufferId {
-        let gfx_buffer_id = rand::random();
+        let gfx_buffer_id = NEXT_BUFFER_ID.fetch_add(1, Ordering::SeqCst);
 
         let method = GraphicsMethod::NewIndexBuffer((indices, gfx_buffer_id));
         let _ = self.method_req.send(method);

+ 1 - 0
bin/darkwallet/src/plugin/darkirc.rs

@@ -181,6 +181,7 @@ impl DarkIrc {
         let mut p2p_settings: NetSettings = Default::default();
         p2p_settings.app_version = semver::Version::parse("0.5.0").unwrap();
         p2p_settings.seeds.push(url::Url::parse("tcp+tls://lilith1.dark.fi:5262").unwrap());
+        p2p_settings.seeds.push(url::Url::parse("tcp+tls://agorism.dev:26661").unwrap());
         p2p_settings.outbound_connect_timeout = 40;
         p2p_settings.channel_handshake_timeout = 30;
         p2p_settings.p2p_datastore = p2p_datastore_path().into_os_string().into_string().ok();