diff --git a/ohkami/src/request/mod.rs b/ohkami/src/request/mod.rs index 1cccadf7..0209b053 100644 --- a/ohkami/src/request/mod.rs +++ b/ohkami/src/request/mod.rs @@ -189,14 +189,16 @@ impl Request { #[cfg(any(feature="rt_tokio",feature="rt_async-std"))] #[inline] pub(crate) fn clear(&mut self) { - for b in &mut *self.__buf__ { - match b {0 => break, _ => *b = 0} - } - self.path = Path::uninit(); - self.query = None; - self.headers.clear(); - self.payload = None; - self.store.clear(); + if self.__buf__[0] != 0 { + for b in &mut *self.__buf__ { + match b {0 => break, _ => *b = 0} + } + self.path = Path::uninit(); + self.query = None; + self.headers.clear(); + self.payload = None; + self.store.clear(); + } /* else: just after `init`ed or `clear`ed */ } #[cfg(any(feature="rt_tokio",feature="rt_async-std"))] diff --git a/ohkami/src/session/mod.rs b/ohkami/src/session/mod.rs index fb6ff4c3..4b31c375 100644 --- a/ohkami/src/session/mod.rs +++ b/ohkami/src/session/mod.rs @@ -67,6 +67,7 @@ impl Session { let mut req = Request::init(); let mut req = unsafe {Pin::new_unchecked(&mut req)}; loop { + req.clear(); match req.as_mut().read(&mut self.connection).await { Ok(Some(())) => { let close = matches!(req.headers.Connection(), Some("close" | "Close")); @@ -86,7 +87,6 @@ impl Session { Ok(None) => break Upgrade::None, Err(res) => {res.send(&mut self.connection).await;}, } - req.clear() } }).await { Some(Upgrade::None) | None => {