Changing the sequence of body send execution.

Request state ready_handler required for further websocket events processing.
It is not required for regular response transferring.
This commit is contained in:
Max Romanov
2019-08-16 14:55:18 +03:00
parent 29911538ea
commit 686f5b1436
3 changed files with 11 additions and 11 deletions

View File

@@ -908,7 +908,6 @@ nxt_h1p_request_header_send(nxt_task_t *task, nxt_http_request_t *r)
nxt_h1proto_t *h1p; nxt_h1proto_t *h1p;
const nxt_str_t *status; const nxt_str_t *status;
nxt_http_field_t *field; nxt_http_field_t *field;
nxt_event_engine_t *engine;
u_char buf[UNKNOWN_STATUS_LENGTH]; u_char buf[UNKNOWN_STATUS_LENGTH];
static const char chunked[] = "Transfer-Encoding: chunked\r\n"; static const char chunked[] = "Transfer-Encoding: chunked\r\n";
@@ -1031,12 +1030,7 @@ nxt_h1p_request_header_send(nxt_task_t *task, nxt_http_request_t *r)
c->write = header; c->write = header;
c->write_state = &nxt_h1p_request_send_state; c->write_state = &nxt_h1p_request_send_state;
engine = task->thread->engine; nxt_conn_write(task->thread->engine, c);
nxt_work_queue_add(&engine->fast_work_queue, r->state->ready_handler,
task, r, NULL);
nxt_conn_write(engine, c);
} }

View File

@@ -51,9 +51,12 @@ nxt_http_request_error(nxt_task_t *task, nxt_http_request_t *r,
r->resp.content_length = NULL; r->resp.content_length = NULL;
r->resp.content_length_n = nxt_length(error); r->resp.content_length_n = nxt_length(error);
nxt_http_request_header_send(task, r);
r->state = &nxt_http_request_send_error_body_state; r->state = &nxt_http_request_send_error_body_state;
nxt_http_request_header_send(task, r); nxt_work_queue_add(&task->thread->engine->fast_work_queue,
nxt_http_request_send_error_body, task, r, NULL);
return; return;
fail: fail:
@@ -65,7 +68,6 @@ fail:
static const nxt_http_request_state_t nxt_http_request_send_error_body_state static const nxt_http_request_state_t nxt_http_request_send_error_body_state
nxt_aligned(64) = nxt_aligned(64) =
{ {
.ready_handler = nxt_http_request_send_error_body,
.error_handler = nxt_http_request_error_handler, .error_handler = nxt_http_request_error_handler,
}; };

View File

@@ -3540,9 +3540,14 @@ nxt_router_response_ready_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg,
nxt_buf_chain_add(&r->out, b); nxt_buf_chain_add(&r->out, b);
} }
nxt_http_request_header_send(task, r);
r->state = &nxt_http_request_send_state; r->state = &nxt_http_request_send_state;
nxt_http_request_header_send(task, r); if (r->out) {
nxt_work_queue_add(&task->thread->engine->fast_work_queue,
nxt_http_request_send_body, task, r, NULL);
}
} }
return; return;
@@ -3558,7 +3563,6 @@ fail:
static const nxt_http_request_state_t nxt_http_request_send_state static const nxt_http_request_state_t nxt_http_request_send_state
nxt_aligned(64) = nxt_aligned(64) =
{ {
.ready_handler = nxt_http_request_send_body,
.error_handler = nxt_http_request_error_handler, .error_handler = nxt_http_request_error_handler,
}; };