From f10712f16abc86c018998160a113296e8a71de2c Mon Sep 17 00:00:00 2001 From: Adam Wright Date: Fri, 8 Jan 2016 21:12:01 -0800 Subject: [PATCH] Clean shutdown except for server --- src/lib.rs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 409e6ad..01b7d69 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,7 +11,6 @@ use std::io::{self, Read}; use std::convert; use std::collections::HashMap; use std::net::{ - self, TcpListener, TcpStream, }; @@ -70,13 +69,13 @@ pub fn handle_conn(mut stream: TcpStream, f: Arc) -> Resul let request_packet: Packet = try!(Packet::deserialize(&mut de)); match request_packet { Packet::Shutdown => { + println!("server shutting down"); try!(serde_json::to_writer(&mut stream, &request_packet)); break; }, Packet::Message(id, message) => { let reply = try!(f.serve(&message)); let reply_packet = Packet::Message(id, reply); - println!("write"); try!(serde_json::to_writer(&mut stream, &reply_packet)); }, } @@ -127,7 +126,10 @@ fn reader( let reply_tx = requests.remove(&id).unwrap(); reply_tx.send(reply).unwrap(); }, - Ok(Packet::Shutdown) => break, + Ok(Packet::Shutdown) => { + println!("reader shutting down"); + break; + } // TODO: This shutdown logic is janky.. What's the right way to do this? Err(err) => panic!("unexpected error while parsing!: {:?}", err), } @@ -186,10 +188,11 @@ impl Client } pub fn join(self) -> Result<()> { - let mut state = self.synced_state.lock().unwrap(); - let packet: Packet = Packet::Shutdown; - try!(serde_json::to_writer(&mut state.stream, &packet)); - try!(state.stream.shutdown(net::Shutdown::Both)); + { + let mut state = self.synced_state.lock().unwrap(); + let packet: Packet = Packet::Shutdown; + try!(serde_json::to_writer(&mut state.stream, &packet)); + } self.reader_guard.join().unwrap(); Ok(()) } @@ -259,10 +262,13 @@ mod test { assert_eq!(1, server.count()); assert_eq!(Reply::Increment(1), client.rpc(&Request::Increment).unwrap()); assert_eq!(2, server.count()); + println!("joining client"); client.join::().unwrap(); + println!("joining server"); guard.join(); } + /* struct BarrierServer { barrier: Barrier, inner: Server, @@ -309,4 +315,5 @@ mod test { client.join::().unwrap(); guard.join(); } + */ }