Copilot commented on code in PR #13410:
URL: https://github.com/apache/trafficserver/pull/13410#discussion_r3714540004


##########
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:
   In the `c_write == 0` branch, cache writes no longer invoke 
`consumer_handler(VC_EVENT_WRITE_COMPLETE, c)` on the success path. Previously, 
the tunnel always notified the consumer of completion for a zero-byte write; 
now the cache-write path only signals on error. If the cache VC does not 
independently generate a completion event for a 0-byte VIO, the tunnel may 
stall waiting for completion/cleanup. Consider calling 
`consumer_handler(VC_EVENT_WRITE_COMPLETE, c)` after successfully creating the 
zero-byte cache write VIO (while keeping the VIO creation so that close commits 
metadata).



-- 
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]

Reply via email to