Http::cleanupPeers: check fulfiller is non-null

resolves #185
pull/197/head 1.3
Oliver Giles 1 year ago
parent 1e7e9319c3
commit dab620b01e

@ -131,9 +131,16 @@ kj::Promise<void> Http::cleanupPeers(kj::Timer& timer)
{ {
return timer.afterDelay(15 * kj::SECONDS).then([&]{ return timer.afterDelay(15 * kj::SECONDS).then([&]{
for(EventPeer* p : eventPeers) { for(EventPeer* p : eventPeers) {
// an empty SSE message is a colon followed by two newlines // Even single threaded, if load causes this timeout to be serviced
p->pendingOutput.push_back(":\n\n"); // before writeEvents has created a fulfiller, or if an exception
p->fulfiller->fulfill(); // caused the destruction of the promise but attach(peer) hasn't yet
// removed it from the eventPeers list, we will see a null fulfiller
// here
if(p->fulfiller) {
// an empty SSE message is a colon followed by two newlines
p->pendingOutput.push_back(":\n\n");
p->fulfiller->fulfill();
}
} }
return cleanupPeers(timer); return cleanupPeers(timer);
}).eagerlyEvaluate(nullptr); }).eagerlyEvaluate(nullptr);

Loading…
Cancel
Save