Loading src/httpd.cpp +11 −6 Original line number Diff line number Diff line Loading @@ -730,12 +730,17 @@ void libhttppp::HttpEvent::_resumeH2Streams(HttpRequest &cureq, } ss->tempreq->SendData.clear(); } else { // No data yet — upstream still loading if (ss->tempreq->slots[0].ResponsePending.exchange(false)) { ss->emptyCount = 0; } else { // No data yet — upstream still loading. // NOTE: ss->tempreq is a synthetic per-stream request, not a // real connection tracked by epoll — nothing external ever // sets its ResponsePending. The app-level ResponseEvent we // just called (e.g. bolli's streaming handler) sets it on // *every* empty read as a "rearm me" signal to a real // connection; reading it back here as if it meant "new data // arrived" was self-referential and reset emptyCount every // single time, so the stall counter below could never // advance and a permanently-stalled upstream spun forever. ++ss->emptyCount; } if (ss->emptyCount > 500) { // Genuine stall — send END_STREAM out += h2BuildFrame(H2_FRAME_DATA, H2_FLAG_END_STREAM, sid, ""); Loading Loading
src/httpd.cpp +11 −6 Original line number Diff line number Diff line Loading @@ -730,12 +730,17 @@ void libhttppp::HttpEvent::_resumeH2Streams(HttpRequest &cureq, } ss->tempreq->SendData.clear(); } else { // No data yet — upstream still loading if (ss->tempreq->slots[0].ResponsePending.exchange(false)) { ss->emptyCount = 0; } else { // No data yet — upstream still loading. // NOTE: ss->tempreq is a synthetic per-stream request, not a // real connection tracked by epoll — nothing external ever // sets its ResponsePending. The app-level ResponseEvent we // just called (e.g. bolli's streaming handler) sets it on // *every* empty read as a "rearm me" signal to a real // connection; reading it back here as if it meant "new data // arrived" was self-referential and reset emptyCount every // single time, so the stall counter below could never // advance and a permanently-stalled upstream spun forever. ++ss->emptyCount; } if (ss->emptyCount > 500) { // Genuine stall — send END_STREAM out += h2BuildFrame(H2_FRAME_DATA, H2_FLAG_END_STREAM, sid, ""); Loading