1
0
mirror of https://github.com/fafhrd91/actix-web synced 2024-11-24 00:21:08 +01:00

Fix segfault in ServerSettings::get_response_builder()

This commit is contained in:
Nikolay Kim 2018-05-11 21:43:13 -07:00
parent 75861a21ae
commit ed9971b212
4 changed files with 21 additions and 6 deletions

View File

@ -8,7 +8,6 @@ cache:
matrix: matrix:
include: include:
- rust: 1.21.0
- rust: stable - rust: stable
- rust: beta - rust: beta
- rust: nightly - rust: nightly

View File

@ -1,5 +1,10 @@
# Changes # Changes
## 0.5.8 (2018-05-11)
* Fix segfault in ServerSettings::get_response_builder()
## 0.5.7 (2018-05-09) ## 0.5.7 (2018-05-09)
* Fix http/2 payload streaming #215 * Fix http/2 payload streaming #215

View File

@ -1,6 +1,6 @@
[package] [package]
name = "actix-web" name = "actix-web"
version = "0.5.7" version = "0.5.8"
authors = ["Nikolay Kim <fafhrd91@gmail.com>"] authors = ["Nikolay Kim <fafhrd91@gmail.com>"]
description = "Actix web is a simple, pragmatic and extremely fast web framework for Rust." description = "Actix web is a simple, pragmatic and extremely fast web framework for Rust."
readme = "README.md" readme = "README.md"

View File

@ -8,15 +8,14 @@ use std::sync::Arc;
use std::{fmt, mem, net}; use std::{fmt, mem, net};
use time; use time;
use super::KeepAlive;
use super::channel::Node; use super::channel::Node;
use super::helpers; use super::helpers;
use super::shared::{SharedBytes, SharedBytesPool}; use super::shared::{SharedBytes, SharedBytesPool};
use super::KeepAlive;
use body::Body; use body::Body;
use httpresponse::{HttpResponse, HttpResponseBuilder, HttpResponsePool}; use httpresponse::{HttpResponse, HttpResponseBuilder, HttpResponsePool};
/// Various server settings /// Various server settings
#[derive(Clone)]
pub struct ServerSettings { pub struct ServerSettings {
addr: Option<net::SocketAddr>, addr: Option<net::SocketAddr>,
secure: bool, secure: bool,
@ -28,6 +27,18 @@ pub struct ServerSettings {
unsafe impl Sync for ServerSettings {} unsafe impl Sync for ServerSettings {}
unsafe impl Send for ServerSettings {} unsafe impl Send for ServerSettings {}
impl Clone for ServerSettings {
fn clone(&self) -> Self {
ServerSettings {
addr: self.addr,
secure: self.secure,
host: self.host.clone(),
cpu_pool: self.cpu_pool.clone(),
responses: HttpResponsePool::pool(),
}
}
}
struct InnerCpuPool { struct InnerCpuPool {
cpu_pool: UnsafeCell<Option<CpuPool>>, cpu_pool: UnsafeCell<Option<CpuPool>>,
} }
@ -72,7 +83,7 @@ impl Default for ServerSettings {
impl ServerSettings { impl ServerSettings {
/// Crate server settings instance /// Crate server settings instance
pub(crate) fn new( pub(crate) fn new(
addr: Option<net::SocketAddr>, host: &Option<String>, secure: bool addr: Option<net::SocketAddr>, host: &Option<String>, secure: bool,
) -> ServerSettings { ) -> ServerSettings {
let host = if let Some(ref host) = *host { let host = if let Some(ref host) = *host {
host.clone() host.clone()
@ -119,7 +130,7 @@ impl ServerSettings {
#[inline] #[inline]
pub(crate) fn get_response_builder( pub(crate) fn get_response_builder(
&self, status: StatusCode &self, status: StatusCode,
) -> HttpResponseBuilder { ) -> HttpResponseBuilder {
HttpResponsePool::get_builder(&self.responses, status) HttpResponsePool::get_builder(&self.responses, status)
} }