Hi Ruben!

On Tue, 2021-03-02 23:41:30 +0100, Jan-Benedict Glaw <jbg...@lug-owl.de> wrote:
> SIGPIPE was a red herring, it happens ever so often and is ignored.
> But there's a SIGSEGV:
[...]

My impression is that access to the logWatchers isn't locked, so
incoming log output (from some run) are pushed by iterating over
current logWatchers. However, if a logWatcher goes away, it's still
referenced during the push loop.

287 void Http::notifyLog(std::string job, uint run, std::string log_chunk, bool 
eot)
288 {
289     for(LogWatcher* lw : logWatchers) {
290         if(lw->job == job && lw->run == run) {
291             lw->pendingOutput.push_back(kj::mv(log_chunk));
292             lw->fulfiller->fulfill(kj::mv(eot));
293         }
294     }
295 }

Seems it's quite easily triggered by having a job that logs _lots_ of
lines and playing with a browser's reload button...

MfG, JBG

-- 

Attachment: signature.asc
Description: PGP signature

Reply via email to