jcs
/detritus
/amendments
/46
request: Do callback one more time after connection closes
With tcp_done_reading set, the caller can use it to know when there
is definitely no more data coming.
jcs made amendment 46 about 1 year ago
--- request.c Fri Nov 15 13:53:58 2024
+++ request.c Wed Nov 20 13:17:14 2024
@@ -550,8 +550,12 @@ request_data_shuffle(struct request *request, request_
/* receive data and send it to the consumer */
slen = request_tcp_avail(request);
- if (slen < 0)
+ if (slen < 0) {
+ /* connection closed, let the consumer do one final read */
+ len = 0;
+ consumer(request, consumer_cookie, &data, &len, true);
return false;
+ }
if (slen > 0) {
status = 1;
@@ -563,8 +567,13 @@ request_data_shuffle(struct request *request, request_
/* read into their buf */
slen = request_tcp_read(request, data, len);
- if (slen < 0)
+ if (slen < 0) {
+ /* read failed, give one final pass */
+ request->tcp_done_reading = true;
+ len = 0;
+ consumer(request, consumer_cookie, &data, &len, true);
return false;
+ }
if (slen > 0) {
/* and let them know we read it */
len = slen;