diff --git a/actix-http/src/message.rs b/actix-http/src/message.rs index bccb4d53e..736f35ee1 100644 --- a/actix-http/src/message.rs +++ b/actix-http/src/message.rs @@ -343,6 +343,8 @@ impl ResponseHead { } pub struct Message<T: Head> { + // Rc here should not be cloned by anyone. + // It's used to reuse allocation of T and no shared ownership is allowed. head: Rc<T>, } @@ -353,14 +355,6 @@ impl<T: Head> Message<T> { } } -impl<T: Head> Clone for Message<T> { - fn clone(&self) -> Self { - Message { - head: self.head.clone(), - } - } -} - impl<T: Head> std::ops::Deref for Message<T> { type Target = T; @@ -377,9 +371,7 @@ impl<T: Head> std::ops::DerefMut for Message<T> { impl<T: Head> Drop for Message<T> { fn drop(&mut self) { - if Rc::strong_count(&self.head) == 1 { - T::with_pool(|p| p.release(self.head.clone())) - } + T::with_pool(|p| p.release(self.head.clone())) } }