From cb26bebb52ef7682e727512cfdc250662ea45ef8 Mon Sep 17 00:00:00 2001 From: Jake McGinty Date: Sun, 6 May 2018 18:57:35 -0700 Subject: peer_server: hold on to single local csprng instance for performance --- src/interface/peer_server.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/interface/peer_server.rs b/src/interface/peer_server.rs index 31b004b..f3d68b2 100644 --- a/src/interface/peer_server.rs +++ b/src/interface/peer_server.rs @@ -10,7 +10,7 @@ use timer::{Timer, TimerMessage}; use byteorder::{ByteOrder, LittleEndian}; use failure::{Error, err_msg}; use futures::{Async, Future, Stream, Sink, Poll, unsync::mpsc}; -use rand::{self, Rng}; +use rand::{self, Rng, ThreadRng}; use udp::{Endpoint, UdpSocket, PeerServerMessage, UdpChannel}; use tokio_core::reactor::Handle; @@ -49,6 +49,7 @@ pub struct PeerServer { timer : Timer, tunnel_tx : mpsc::Sender>, cookie : cookie::Validator, + rng : ThreadRng, } impl PeerServer { @@ -61,7 +62,8 @@ impl PeerServer { port : None, outgoing : mpsc::channel(1024).into(), channel : mpsc::channel(1024).into(), - cookie : cookie::Validator::new(&[0u8; 32]) + cookie : cookie::Validator::new(&[0u8; 32]), + rng : rand::thread_rng() }) } @@ -115,10 +117,9 @@ impl PeerServer { self.handle.spawn(self.tunnel_tx.clone().send(packet).then(|_| Ok(()))); } - fn unused_index(state: &mut State) -> u32 { - let mut rng = rand::thread_rng(); // TODO: cache the thread RNG for perf + fn unused_index(&mut self, state: &mut State) -> u32 { loop { - let tentative: u32 = rng.gen(); + let tentative: u32 = self.rng.gen(); if !state.index_map.contains_key(&tentative) { return tentative; } -- cgit v1.2.3-59-g8ed1b