From 7fd6b44cdea416010ada4a9370c7530fda7adf62 Mon Sep 17 00:00:00 2001 From: Fabian Franz Date: Fri, 26 Jun 2020 21:27:23 +0200 Subject: [PATCH] Issue #956: Take the cookie store write lock only when necessary (#960) --- src/async_impl/client.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/async_impl/client.rs b/src/async_impl/client.rs index f96398a..5deb05f 100644 --- a/src/async_impl/client.rs +++ b/src/async_impl/client.rs @@ -1329,11 +1329,14 @@ impl Future for PendingRequest { #[cfg(feature = "cookies")] { if let Some(store_wrapper) = self.client.cookie_store.as_ref() { - let mut store = store_wrapper.write().unwrap(); - let cookies = cookie::extract_response_cookies(&res.headers()) + let mut cookies = cookie::extract_response_cookies(&res.headers()) .filter_map(|res| res.ok()) - .map(|cookie| cookie.into_inner().into_owned()); - store.0.store_response_cookies(cookies, &self.url); + .map(|cookie| cookie.into_inner().into_owned()) + .peekable(); + if cookies.peek().is_some() { + let mut store = store_wrapper.write().unwrap(); + store.0.store_response_cookies(cookies, &self.url); + } } } let should_redirect = match res.status() {