Copilot commented on code in PR #13410:
URL: https://github.com/apache/trafficserver/pull/13410#discussion_r3713890740
##########
src/proxy/http/HttpTunnel.cc:
##########
@@ -1109,9 +1109,17 @@ HttpTunnel::producer_run(HttpTunnelProducer *p)
}
if (c_write == 0) {
- // Nothing to do, call back the cleanup handlers
- c->write_vio = nullptr;
- consumer_handler(VC_EVENT_WRITE_COMPLETE, c);
+ // Cache writes need a VIO even when the body is empty so that closing
the
+ // cache VC commits the response metadata instead of aborting the write.
+ if (c->vc_type == HttpTunnelType_t::CACHE_WRITE) {
+ c->write_vio = c->vc->do_io_write(this, 0, c->buffer_reader);
+ if (c->write_vio == nullptr) {
+ consumer_handler(VC_EVENT_ERROR, c);
+ }
+ } else {
+ c->write_vio = nullptr;
+ consumer_handler(VC_EVENT_WRITE_COMPLETE, c);
+ }
Review Comment:
If `do_io_write(...)` returns `nullptr`, `consumer_handler(VC_EVENT_ERROR,
c)` is invoked but `c->write_vio` is left as-is and execution continues past
this block. That can lead to confusing state and, depending on what
`consumer_handler` does, risks follow-on use of a consumer that may already be
cleaning up. Set `c->write_vio = nullptr` before calling the error handler and
return/stop further processing from `producer_run` after delivering the error
event.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]