Fixed a bug with the drop behavior for IrcServer.
This commit is contained in:
parent
6ece3e25fe
commit
33004abc12
1 changed files with 6 additions and 9 deletions
|
@ -36,8 +36,8 @@ pub trait Server<'a, T: IrcRead, U: IrcWrite> {
|
|||
|
||||
/// A thread-safe implementation of an IRC Server connection.
|
||||
pub struct IrcServer<T: IrcRead, U: IrcWrite> {
|
||||
state: Arc<ServerState<T, U>>,
|
||||
tx: Sender<Message>,
|
||||
state: Arc<ServerState<T, U>>,
|
||||
}
|
||||
|
||||
/// Thread-safe internal state for an IRC server connection.
|
||||
|
@ -83,7 +83,7 @@ impl IrcServer<BufReader<NetStream>, BufWriter<NetStream>> {
|
|||
|
||||
impl<T: IrcRead, U: IrcWrite> Clone for IrcServer<T, U> {
|
||||
fn clone(&self) -> IrcServer<T, U> {
|
||||
IrcServer { state: self.state.clone(), tx: self.tx.clone() }
|
||||
IrcServer { tx: self.tx.clone(), state: self.state.clone() }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -143,18 +143,15 @@ impl<T: IrcRead, U: IrcWrite> IrcServer<T, U> {
|
|||
alt_nick_index: RwLock::new(0),
|
||||
});
|
||||
let weak = Arc::downgrade(&state);
|
||||
let write_handle = spawn(move || {
|
||||
while let Some(strong) = weak.upgrade() {
|
||||
match rx.recv() {
|
||||
Ok(msg) => { IrcServer::write(&strong, msg); },
|
||||
Err(_) => ()
|
||||
}
|
||||
let write_handle = spawn(move || while let Ok(msg) = rx.recv() {
|
||||
if let Some(strong) = weak.upgrade() {
|
||||
IrcServer::write(&strong, msg);
|
||||
}
|
||||
});
|
||||
let state2 = state.clone();
|
||||
let mut handle = state2.write_handle.lock().unwrap();
|
||||
*handle = Some(write_handle);
|
||||
IrcServer { state: state, tx: tx }
|
||||
IrcServer { tx: tx, state: state }
|
||||
}
|
||||
|
||||
/// Gets a reference to the IRC server's connection.
|
||||
|
|
Loading…
Add table
Reference in a new issue