From 3d50819d147cb312421830e25e2fb566013ffb6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20B=C3=BChler?= Date: Sun, 20 Dec 2009 16:49:10 +0100 Subject: [PATCH] Move the cqlimit reset/set back to connection.c (vrequest_reset may be called with data in con->raw_in, so cqlimit_reset isn't a good idea) --- src/main/connection.c | 21 +++++++++++++++++++-- src/main/virtualrequest.c | 8 -------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main/connection.c b/src/main/connection.c index fc80723..2dae928 100644 --- a/src/main/connection.c +++ b/src/main/connection.c @@ -471,8 +471,10 @@ liConnection* li_connection_new(liWorker *wrk) { con->in = con->mainvr->vr_in; con->out = con->mainvr->vr_out; - li_chunkqueue_set_limit(con->raw_in, con->mainvr->vr_in->limit); - li_chunkqueue_set_limit(con->raw_out, con->mainvr->vr_out->limit); + li_chunkqueue_set_limit(con->raw_in, con->in->limit); + li_chunkqueue_set_limit(con->raw_out, con->out->limit); + li_cqlimit_set_limit(con->raw_in->limit, 512*1024); + li_cqlimit_set_limit(con->raw_out->limit, 512*1024); con->keep_alive_data.link = NULL; con->keep_alive_data.timeout = 0; @@ -517,6 +519,15 @@ void li_connection_reset(liConnection *con) { li_chunkqueue_reset(con->raw_out); li_vrequest_reset(con->mainvr, FALSE); + + /* restore chunkqueue limits */ + li_chunkqueue_set_limit(con->raw_in, con->in->limit); + li_chunkqueue_set_limit(con->raw_out, con->out->limit); + li_cqlimit_reset(con->raw_in->limit); + li_cqlimit_reset(con->raw_out->limit); + li_cqlimit_set_limit(con->raw_in->limit, 512*1024); + li_cqlimit_set_limit(con->raw_out->limit, 512*1024); + li_http_request_parser_reset(&con->req_parser_ctx); g_string_truncate(con->remote_addr_str, 0); @@ -623,6 +634,12 @@ static void li_connection_reset_keep_alive(liConnection *con) { li_vrequest_reset(con->mainvr, TRUE); li_http_request_parser_reset(&con->req_parser_ctx); + /* restore chunkqueue limits (don't reset, we might still have some data in raw_in) */ + li_chunkqueue_set_limit(con->raw_in, con->in->limit); + li_chunkqueue_set_limit(con->raw_out, con->out->limit); + li_cqlimit_set_limit(con->raw_in->limit, 512*1024); + li_cqlimit_set_limit(con->raw_out->limit, 512*1024); + con->ts = CUR_TS(con->wrk); /* reset stats */ diff --git a/src/main/virtualrequest.c b/src/main/virtualrequest.c index 4666a92..9dd86e4 100644 --- a/src/main/virtualrequest.c +++ b/src/main/virtualrequest.c @@ -168,8 +168,6 @@ liVRequest* li_vrequest_new(liConnection *con, liVRequestHandlerCB handle_respon li_chunkqueue_set_limit(vr->in_memory, vr->in->limit); li_chunkqueue_use_limit(vr->out, vr); li_chunkqueue_set_limit(vr->vr_out, vr->out->limit); - li_cqlimit_set_limit(vr->in->limit, 512*1024); - li_cqlimit_set_limit(vr->out->limit, 512*1024); vr->in_buffer_state.flush_limit = -1; /* wait until upload is complete */ vr->in_buffer_state.split_on_file_chunks = FALSE; @@ -246,17 +244,11 @@ void li_vrequest_reset(liVRequest *vr, gboolean keepalive) { vr->in_buffer_state.flush_limit = -1; /* wait until upload is complete */ vr->in_buffer_state.split_on_file_chunks = FALSE; - /* restore chunkqueue limits */ - li_cqlimit_reset(vr->in->limit); - li_cqlimit_reset(vr->out->limit); - li_chunkqueue_use_limit(vr->in, vr); li_chunkqueue_set_limit(vr->vr_in, vr->in->limit); li_chunkqueue_set_limit(vr->in_memory, vr->in->limit); li_chunkqueue_use_limit(vr->out, vr); li_chunkqueue_set_limit(vr->vr_out, vr->out->limit); - li_cqlimit_set_limit(vr->in->limit, 512*1024); - li_cqlimit_set_limit(vr->out->limit, 512*1024); if (g_atomic_int_get(&vr->queued)) { /* atomic access shouldn't be needed here; no one else can access vr here... */ g_queue_unlink(&vr->wrk->job_queue, &vr->job_queue_link);