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


##########
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:
   do_io_write() is assigned directly to c->write_vio, so a null return already 
leaves it null. consumer_handler(VC_EVENT_ERROR, c) marks this consumer dead 
and performs the cache-write cleanup. producer_run() must continue so other 
consumers are initialized and the common producer/buffer cleanup runs; 
returning here could strand those consumers and skip releasing buffer_start. 
This also matches the existing positive-length write failure path, so I’m 
leaving the control flow unchanged.



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