From 0845451d803829914f466a35add892d8b844a3ec Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 2 May 2021 00:22:02 +0100 Subject: [PATCH] cmdlistener: Fix writer framing on errors, restructure Signed-off-by: Ian Jackson --- daemon/cmdlistener.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/daemon/cmdlistener.rs b/daemon/cmdlistener.rs index 6b0d481d..4df65db1 100644 --- a/daemon/cmdlistener.rs +++ b/daemon/cmdlistener.rs @@ -69,7 +69,7 @@ type PCH = PermissionCheckHow; //#[throws(CSE)] fn execute_and_respond(cs: &mut CommandStreamData, cmd: MgmtCommand, mut bulk_upload: ReadFrame, - mut for_response: WriteFrame) + for_response: &mut FrameWriter) -> Result<(), CSE> where R: Read, W: Write { @@ -310,6 +310,7 @@ fn execute_and_respond(cs: &mut CommandStreamData, cmd: MgmtCommand, } }; + let mut for_response = for_response.new_frame()?; rmp_serde::encode::write_named(&mut for_response, &resp).context("respond")?; bulk_download(&mut for_response).context("download")?; for_response.finish().context("flush")?; @@ -1213,8 +1214,7 @@ impl CommandStream<'_> { use MgmtChannelReadError::*; match self.chan.read.read_withbulk::() { Ok((cmd, rbulk)) => { - let wf = self.chan.write.new_frame()?; - execute_and_respond(&mut self.d, cmd, rbulk, wf)?; + execute_and_respond(&mut self.d, cmd, rbulk, &mut self.chan.write)?; }, Err(EOF) => break, Err(IO(e)) => Err(e).context("read command stream")?, -- 2.30.2