summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/configfile.c8
-rw-r--r--src/connections.c3
-rw-r--r--src/h2.c2
-rw-r--r--src/plugin_config.h2
-rw-r--r--src/reqpool.c23
-rw-r--r--src/reqpool.h7
-rw-r--r--src/request.h2
-rw-r--r--src/response.c3
8 files changed, 42 insertions, 8 deletions
diff --git a/src/configfile.c b/src/configfile.c
index 785200b2..8c6f6397 100644
--- a/src/configfile.c
+++ b/src/configfile.c
@@ -12,6 +12,7 @@
#include "configparser.h"
#include "configfile.h"
#include "plugin.h"
+#include "reqpool.h"
#include "stat_cache.h"
#include "sys-crypto.h"
@@ -203,7 +204,7 @@ static void config_merge_config(request_config * const pconf, const config_plugi
void config_patch_config(request_st * const r) {
config_data_base * const p = r->con->config_data_base;
- /* performed by config_reset_config() */
+ /* performed by request_config_reset() */
/*memcpy(&r->conf, &p->defaults, sizeof(request_config));*/
for (int i = 1, used = p->nconfig; i < used; ++i) {
@@ -212,11 +213,13 @@ void config_patch_config(request_st * const r) {
}
}
+#if 0 /*(moved to reqpool.c:request_config_reset())*/
void config_reset_config(request_st * const r) {
/* initialize request_config (r->conf) from top-level request_config */
config_data_base * const p = r->con->config_data_base;
memcpy(&r->conf, &p->defaults, sizeof(request_config));
}
+#endif
static void config_burl_normalize_cond (server * const srv) {
buffer * const tb = srv->tmp_buf;
@@ -1156,6 +1159,8 @@ static int config_insert(server *srv) {
if (p->defaults.log_request_handling || p->defaults.log_request_header)
p->defaults.log_request_header_on_error = 1;
+ request_config_set_defaults(&p->defaults);
+
return rc;
}
@@ -1382,6 +1387,7 @@ void config_print(server *srv) {
}
void config_free(server *srv) {
+ /*request_config_set_defaults(NULL);*//*(not necessary)*/
config_free_config(srv->config_data_base);
array_free(srv->config_context);
diff --git a/src/connections.c b/src/connections.c
index 8f33bc4e..f81e4d9b 100644
--- a/src/connections.c
+++ b/src/connections.c
@@ -230,7 +230,6 @@ static void connection_handle_response_end_state(request_st * const r, connectio
if (r->keep_alive > 0) {
request_reset(r);
- config_reset_config(r);
con->is_readable = 1; /* potentially trigger optimistic read */
/*(accounting used by mod_accesslog for HTTP/1.0 and HTTP/1.1)*/
r->bytes_read_ckpt = con->bytes_read;
@@ -545,7 +544,6 @@ static connection *connection_init(server *srv) {
request_st * const r = &con->request;
request_init_data(r, con, srv);
- config_reset_config(r);
con->write_queue = &r->write_queue;
con->read_queue = &r->read_queue;
@@ -584,7 +582,6 @@ void connections_free(server *srv) {
static void connection_reset(connection *con) {
request_st * const r = &con->request;
request_reset(r);
- config_reset_config(r);
r->bytes_read_ckpt = 0;
r->bytes_written_ckpt = 0;
con->is_readable = 1;
diff --git a/src/h2.c b/src/h2.c
index 9784a3a4..aff64807 100644
--- a/src/h2.c
+++ b/src/h2.c
@@ -2508,7 +2508,7 @@ h2_init_stream (request_st * const h2r, connection * const con)
if (used > 1) /*(save 128b per con if no conditions)*/
memcpy(r->cond_match, h2r->cond_match, used * sizeof(cond_match_t));
#endif
- /*(see config_reset_config() and request_reset_ex())*/
+ /*(see request_config_reset() and request_reset_ex())*/
r->server_name = h2r->server_name;
memcpy(&r->conf, &h2r->conf, sizeof(request_config));
diff --git a/src/plugin_config.h b/src/plugin_config.h
index d9369701..20e89a80 100644
--- a/src/plugin_config.h
+++ b/src/plugin_config.h
@@ -78,7 +78,7 @@ void config_log_error_close(server *srv);
void config_reset_config_bytes_sec(void *p);
-void config_reset_config(request_st *r);
+/*void config_reset_config(request_st *r);*//* moved to request_config_reset()*/
void config_patch_config(request_st *r);
void config_cond_cache_reset(request_st *r);
diff --git a/src/reqpool.c b/src/reqpool.c
index 3f628d89..d4e5e45f 100644
--- a/src/reqpool.c
+++ b/src/reqpool.c
@@ -8,6 +8,7 @@
#include "reqpool.h"
#include <stdlib.h>
+#include <string.h>
#include "base.h"
#include "buffer.h"
@@ -18,6 +19,24 @@
#include "response.h"
+static const request_config *request_config_defaults;
+
+
+void
+request_config_set_defaults (const request_config *config_defaults)
+{
+ request_config_defaults = config_defaults;
+}
+
+
+__attribute_noinline__
+void
+request_config_reset (request_st * const r)
+{
+ memcpy(&r->conf, request_config_defaults, sizeof(request_config));
+}
+
+
void
request_init_data (request_st * const r, connection * const con, server * const srv)
{
@@ -48,6 +67,8 @@ request_init_data (request_st * const r, connection * const con, server * const
force_assert(NULL != r->cond_match);
}
#endif
+
+ request_config_reset(r);
}
@@ -120,6 +141,8 @@ request_reset (request_st * const r)
/* The cond_cache gets reset in response.c */
/* config_cond_cache_reset(r); */
+
+ request_config_reset(r);
}
diff --git a/src/reqpool.h b/src/reqpool.h
index 994cecd8..5f390ad1 100644
--- a/src/reqpool.h
+++ b/src/reqpool.h
@@ -4,6 +4,13 @@
#include "base_decls.h"
+struct request_config; /* declaration */
+
+__attribute_cold__
+void request_config_set_defaults (const struct request_config *config_defaults);
+
+void request_config_reset (request_st * const r);
+
void request_init_data (request_st *r, connection *con, server *srv);
void request_reset (request_st *r);
void request_reset_ex (request_st *r);
diff --git a/src/request.h b/src/request.h
index 0d20048e..457927bb 100644
--- a/src/request.h
+++ b/src/request.h
@@ -16,7 +16,7 @@ struct cond_cache_t; /* declaration */
struct cond_match_t; /* declaration */
struct stat_cache_entry;/* declaration */
-typedef struct {
+typedef struct request_config {
unsigned int http_parseopts;
uint32_t max_request_field_size;
const array *mimetypes;
diff --git a/src/response.c b/src/response.c
index 01237592..c139e2db 100644
--- a/src/response.c
+++ b/src/response.c
@@ -2,6 +2,7 @@
#include "response.h"
#include "request.h"
+#include "reqpool.h"
#include "base.h"
#include "fdevent.h"
#include "http_header.h"
@@ -619,7 +620,7 @@ static handler_t http_response_comeback (request_st * const r)
if (NULL != r->handler_module || !buffer_is_unset(&r->physical.path))
return HANDLER_GO_ON;
- config_reset_config(r);
+ request_config_reset(r);
if (__builtin_expect( (r->http_host != NULL), 1)) {
buffer_copy_buffer(&r->uri.authority, r->http_host);