diff --git a/CHANGES.md b/CHANGES.md index 5a415ddc8..a0503c86d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,6 @@ # Changes -## Unreleased - 2020-xx-xx +## Unreleased - 2021-xx-xx ### Changed * Bumped `rand` to `0.8` * Update `rust-tls` to `0.19.0` @@ -14,6 +14,7 @@ [#1812]: https://github.com/actix/actix-web/pull/1812 [#1852]: https://github.com/actix/actix-web/pull/1852 + ## 3.3.2 - 2020-12-01 ### Fixed * Removed an occasional `unwrap` on `None` panic in `NormalizePathNormalization`. [#1762] diff --git a/Cargo.toml b/Cargo.toml index 9f7835a2f..b741ea252 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -105,10 +105,10 @@ time = { version = "0.2.7", default-features = false, features = ["std"] } url = "2.1" open-ssl = { package = "openssl", version = "0.10", optional = true } rust-tls = { package = "rustls", version = "0.19.0", optional = true } -tinyvec = { version = "1", features = ["alloc"] } +smallvec = "1.6" [dev-dependencies] -actix = "0.10.0" +actix = "0.11.0-beta.1" actix-http = { version = "2.2.0", features = ["actors"] } rand = "0.8" env_logger = "0.8" @@ -131,8 +131,7 @@ actix-multipart = { path = "actix-multipart" } actix-files = { path = "actix-files" } awc = { path = "awc" } -# FIXME: remove these override -actix = { git = "https://github.com/fakeshadow/actix.git", branch = "master" } +actix = { git = "https://github.com/actix/actix.git", branch = "master" } actix-tls = { git = "https://github.com/actix/actix-net.git", branch = "master" } actix-server = { git = "https://github.com/actix/actix-net.git", branch = "master" } actix-service = { git = "https://github.com/actix/actix-net.git", branch = "master" } diff --git a/README.md b/README.md index 62ee50243..956bb3741 100644 --- a/README.md +++ b/README.md @@ -107,5 +107,5 @@ at your option. ## Code of Conduct -Contribution to the actix-web crate is organized under the terms of the Contributor Covenant, the -maintainers of Actix web, promises to intervene to uphold that code of conduct. +Contribution to the actix-web repo is organized under the terms of the Contributor Covenant. +The Actix team promises to intervene to uphold that code of conduct. diff --git a/actix-files/CHANGES.md b/actix-files/CHANGES.md index 9dc7684ba..eb5ca79df 100644 --- a/actix-files/CHANGES.md +++ b/actix-files/CHANGES.md @@ -1,8 +1,8 @@ # Changes -## Unreleased - 2020-xx-xx -* Update `bytes` to `1`. +## Unreleased - 2021-xx-xx * `HttpRange::parse` now has its own error type. +* Update `bytes` to `1`. ## 0.5.0 - 2020-12-26 diff --git a/actix-http-test/CHANGES.md b/actix-http-test/CHANGES.md index 01f6a4455..5e4f5a7a5 100644 --- a/actix-http-test/CHANGES.md +++ b/actix-http-test/CHANGES.md @@ -1,6 +1,6 @@ # Changes -## Unreleased - 2020-xx-xx +## Unreleased - 2021-xx-xx * Update `bytes` to `1`. diff --git a/actix-http/CHANGES.md b/actix-http/CHANGES.md index 126c956e9..fde8712c7 100644 --- a/actix-http/CHANGES.md +++ b/actix-http/CHANGES.md @@ -1,11 +1,12 @@ # Changes -## Unreleased - 2020-xx-xx +## Unreleased - 2021-xx-xx ### Changed * Bumped `rand` to `0.8` * Upgrade `bytes` to `1` * Upgrade `h2` to `0.3` + ### Removed * Deprecated `on_connect` methods have been removed. Prefer the new `on_connect_ext` technique. [#1857] diff --git a/actix-http/Cargo.toml b/actix-http/Cargo.toml index 5297b306a..f207d2be3 100644 --- a/actix-http/Cargo.toml +++ b/actix-http/Cargo.toml @@ -46,7 +46,7 @@ actix-utils = "3.0.0-beta.1" actix-rt = "2.0.0-beta.1" actix-threadpool = "0.3.1" actix-tls = "3.0.0-beta.1" -actix = { version = "0.10.0", optional = true } +actix = { version = "0.11.0-beta.1", optional = true } base64 = "0.13" bitflags = "1.2" diff --git a/actix-multipart/CHANGES.md b/actix-multipart/CHANGES.md index 7a148213f..a8216c4f5 100644 --- a/actix-multipart/CHANGES.md +++ b/actix-multipart/CHANGES.md @@ -1,6 +1,6 @@ # Changes -## Unreleased - 2020-xx-xx +## Unreleased - 2021-xx-xx * Fix multipart consuming payload before header checks #1513 * Update `bytes` to `1` diff --git a/actix-web-actors/CHANGES.md b/actix-web-actors/CHANGES.md index e07ec8608..dfda1c6e4 100644 --- a/actix-web-actors/CHANGES.md +++ b/actix-web-actors/CHANGES.md @@ -1,9 +1,10 @@ # Changes -## Unreleased - 2020-xx-xx +## Unreleased - 2021-xx-xx * Upgrade `pin-project` to `1.0`. * Update `bytes` to `1`. + ## 3.0.0 - 2020-09-11 * No significant changes from `3.0.0-beta.2`. diff --git a/actix-web-actors/Cargo.toml b/actix-web-actors/Cargo.toml index 8f5a6a275..541d0de10 100644 --- a/actix-web-actors/Cargo.toml +++ b/actix-web-actors/Cargo.toml @@ -16,7 +16,7 @@ name = "actix_web_actors" path = "src/lib.rs" [dependencies] -actix = "0.10.0" +actix = "0.11.0-beta.1" actix-codec = "0.4.0-beta.1" actix-http = "2.0.0" actix-web = { version = "3.0.0", default-features = false } diff --git a/actix-web-codegen/CHANGES.md b/actix-web-codegen/CHANGES.md index 1ab51f924..a7675d9dd 100644 --- a/actix-web-codegen/CHANGES.md +++ b/actix-web-codegen/CHANGES.md @@ -1,6 +1,6 @@ # Changes -## Unreleased - 2020-xx-xx +## Unreleased - 2021-xx-xx ## 0.4.0 - 2020-09-20 diff --git a/awc/CHANGES.md b/awc/CHANGES.md index 713b0d418..3bfdb6021 100644 --- a/awc/CHANGES.md +++ b/awc/CHANGES.md @@ -1,6 +1,6 @@ # Changes -## Unreleased - 2020-xx-xx +## Unreleased - 2021-xx-xx ### Changed * Upgrade `bytes` to `1`. * Bumped `rand` to `0.8` diff --git a/src/app_service.rs b/src/app_service.rs index f440ef548..f02bb831a 100644 --- a/src/app_service.rs +++ b/src/app_service.rs @@ -10,7 +10,6 @@ use actix_router::{Path, ResourceDef, ResourceInfo, Router, Url}; use actix_service::boxed::{self, BoxService, BoxServiceFactory}; use actix_service::{fn_service, Service, ServiceFactory}; use futures_util::future::{join_all, ok, FutureExt, LocalBoxFuture}; -use tinyvec::tiny_vec; use crate::config::{AppConfig, AppService}; use crate::data::{DataFactory, FnDataFactory}; @@ -244,7 +243,6 @@ where inner.path.reset(); inner.head = head; inner.payload = payload; - inner.app_data = tiny_vec![self.data.clone()]; req } else { HttpRequest::new( diff --git a/src/request.rs b/src/request.rs index bd4bbbf58..432134cd7 100644 --- a/src/request.rs +++ b/src/request.rs @@ -6,7 +6,7 @@ use actix_http::http::{HeaderMap, Method, Uri, Version}; use actix_http::{Error, Extensions, HttpMessage, Message, Payload, RequestHead}; use actix_router::{Path, Url}; use futures_util::future::{ok, Ready}; -use tinyvec::TinyVec; +use smallvec::SmallVec; use crate::config::AppConfig; use crate::error::UrlGenerationError; @@ -22,7 +22,7 @@ pub(crate) struct HttpRequestInner { pub(crate) head: Message, pub(crate) path: Path, pub(crate) payload: Payload, - pub(crate) app_data: TinyVec<[Rc; 4]>, + pub(crate) app_data: SmallVec<[Rc; 4]>, rmap: Rc, config: AppConfig, pool: &'static HttpRequestPool, @@ -39,7 +39,7 @@ impl HttpRequest { app_data: Rc, pool: &'static HttpRequestPool, ) -> HttpRequest { - let mut data = TinyVec::<[Rc; 4]>::new(); + let mut data = SmallVec::<[Rc; 4]>::new(); data.push(app_data); HttpRequest(Rc::new(HttpRequestInner { @@ -277,10 +277,16 @@ impl HttpMessage for HttpRequest { impl Drop for HttpRequest { fn drop(&mut self) { // if possible, contribute to current worker's HttpRequest allocation pool - if Rc::strong_count(&self.0) == 1 { - let v = &mut self.0.pool.0.borrow_mut(); + + // This relies on no Weak exists anywhere.(There is none) + if let Some(inner) = Rc::get_mut(&mut self.0) { + let v = &mut inner.pool.0.borrow_mut(); if v.len() < 128 { - self.extensions_mut().clear(); + // clear additional app_data and keep the root one for reuse. + inner.app_data.truncate(1); + // inner is borrowed mut here. get head's Extension mutably + // to reduce borrow check + inner.head.extensions.get_mut().clear(); v.push(self.0.clone()); } }