Wrap last chunk aggregate flag with atomic.

This commit is contained in:
Kishore Nallan 2021-10-12 20:44:54 +05:30
parent 26fbad2c66
commit a8a8c60e0f
2 changed files with 4 additions and 2 deletions

View File

@ -196,7 +196,7 @@ struct http_req {
std::map<std::string, std::string> params;
bool first_chunk_aggregate;
bool last_chunk_aggregate;
std::atomic<bool> last_chunk_aggregate;
size_t chunk_len;
std::string body;
@ -311,7 +311,7 @@ struct http_req {
content["route_hash"] = route_hash;
content["params"] = params;
content["first_chunk_aggregate"] = first_chunk_aggregate;
content["last_chunk_aggregate"] = last_chunk_aggregate;
content["last_chunk_aggregate"] = last_chunk_aggregate.load();
content["body"] = body;
content["metadata"] = metadata;
content["start_ts"] = start_ts;

View File

@ -875,6 +875,8 @@ bool HttpServer::on_stream_response_message(void *data) {
bool HttpServer::on_request_proceed_message(void *data) {
//LOG(INFO) << "on_request_proceed_message";
// This callback will run concurrently to batch indexer's run() so care must be taken to protect access
// to variables that are written to by the batch indexer, which for now is only: last_chunk_aggregate (atomic)
deferred_req_res_t* req_res = static_cast<deferred_req_res_t *>(data);
auto stream_state = (req_res->req->last_chunk_aggregate) ? H2O_SEND_STATE_FINAL : H2O_SEND_STATE_IN_PROGRESS;