AmendHub

Download:

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;