apr_status_t h2_task_process_request(h2_task_env *env) { conn_rec *c = &env->c; request_rec *r; conn_state_t *cs = c->cs; r = h2_task_create_request(env); if (r && (r->status == HTTP_OK)) { ap_update_child_status(c->sbh, SERVER_BUSY_READ, r); if (cs) cs->state = CONN_STATE_HANDLER; ap_process_request(r); /* After the call to ap_process_request, the * request pool will have been deleted. We set * r=NULL here to ensure that any dereference * of r that might be added later in this function * will result in a segfault immediately instead * of nondeterministic failures later. */ r = NULL; } ap_update_child_status(c->sbh, SERVER_BUSY_WRITE, NULL); c->sbh = NULL; return APR_SUCCESS; }
static apr_status_t h2_task_process_request(h2_task *task, conn_rec *c) { const h2_request *req = task->request; conn_state_t *cs = c->cs; request_rec *r; ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c, "h2_task(%s): create request_rec", task->id); r = h2_request_create_rec(req, c); if (r && (r->status == HTTP_OK)) { /* set timeouts for virtual host of request */ if (task->timeout != r->server->timeout) { task->timeout = r->server->timeout; h2_beam_timeout_set(task->output.beam, task->timeout); if (task->input.beam) { h2_beam_timeout_set(task->input.beam, task->timeout); } } ap_update_child_status(c->sbh, SERVER_BUSY_WRITE, r); if (cs) { cs->state = CONN_STATE_HANDLER; } ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c, "h2_task(%s): start process_request", task->id); ap_process_request(r); if (task->frozen) { ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c, "h2_task(%s): process_request frozen", task->id); } else { ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c, "h2_task(%s): process_request done", task->id); } /* After the call to ap_process_request, the * request pool may have been deleted. We set * r=NULL here to ensure that any dereference * of r that might be added later in this function * will result in a segfault immediately instead * of nondeterministic failures later. */ if (cs) cs->state = CONN_STATE_WRITE_COMPLETION; r = NULL; } else if (!r) { ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c, "h2_task(%s): create request_rec failed, r=NULL", task->id); } else { ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c, "h2_task(%s): create request_rec failed, r->status=%d", task->id, r->status); } return APR_SUCCESS; }
static int ap_process_http_connection(conn_rec *c) { request_rec *r; int csd_set = 0; apr_socket_t *csd = NULL; /* * Read and process each request found on our connection * until no requests are left or we decide to close. */ ap_update_child_status(c->sbh, SERVER_BUSY_READ, NULL); while ((r = ap_read_request(c)) != NULL) { c->keepalive = AP_CONN_UNKNOWN; /* process the request if it was read without error */ ap_update_child_status(c->sbh, SERVER_BUSY_WRITE, r); if (r->status == HTTP_OK) ap_process_request(r); if (ap_extended_status) ap_increment_counts(c->sbh, r); if (c->keepalive != AP_CONN_KEEPALIVE || c->aborted) break; ap_update_child_status(c->sbh, SERVER_BUSY_KEEPALIVE, r); apr_pool_destroy(r->pool); if (ap_graceful_stop_signalled()) break; /* Go straight to select() to wait for the next request */ if (!csd_set) { csd = ap_get_module_config(c->conn_config, &core_module); csd_set = 1; } apr_socket_opt_set(csd, APR_INCOMPLETE_READ, 1); } return OK; }
static int ap_process_http_sync_connection(conn_rec *c) { request_rec *r; conn_state_t *cs = c->cs; apr_socket_t *csd = NULL; int mpm_state = 0; /* * Read and process each request found on our connection * until no requests are left or we decide to close. */ ap_update_child_status_from_conn(c->sbh, SERVER_BUSY_READ, c); while ((r = ap_read_request(c)) != NULL) { c->keepalive = AP_CONN_UNKNOWN; /* process the request if it was read without error */ ap_update_child_status(c->sbh, SERVER_BUSY_WRITE, r); if (r->status == HTTP_OK) { if (cs) cs->state = CONN_STATE_HANDLER; ap_process_request(r); /* After the call to ap_process_request, the * request pool will have been deleted. We set * r=NULL here to ensure that any dereference * of r that might be added later in this function * will result in a segfault immediately instead * of nondeterministic failures later. */ r = NULL; } if (c->keepalive != AP_CONN_KEEPALIVE || c->aborted) break; ap_update_child_status(c->sbh, SERVER_BUSY_KEEPALIVE, NULL); if (ap_mpm_query(AP_MPMQ_MPM_STATE, &mpm_state)) { break; } if (mpm_state == AP_MPMQ_STOPPING) { break; } if (!csd) { csd = ap_get_conn_socket(c); } apr_socket_opt_set(csd, APR_INCOMPLETE_READ, 1); apr_socket_timeout_set(csd, c->base_server->keep_alive_timeout); /* Go straight to select() to wait for the next request */ /* * ******* begin amiya 20140224 ******** */ //ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, APLOGNO(0999) // "After processing request, setting kat: %d",apr_time_sec(c->base_server->keep_alive_timeout)); } return OK; }