c588af9a69
In really catastrophic cases like an fm binary hacked up to crash all the time, we'll deadlock splitting failed batches up into individual re-runs here // If a batch of sources ran and failed, split them up and try again. for _, source := range w.Sources { wg.Add(1) queue <- work{[]string{source}, w.Flags} } Those <- writes will block once queue becomes full, which is really easy to do here since we originally got close to filling the queue, and now we're multiplying that by some K factor with all those failures. There's probably a better way to do this than to make the queues have a ~1M element buffer, but it's kind of the easiest thing to do without really restructuring how the code works. If this proves fussy I'll probably stop using channels and replace them with a mutex and a slice. Change-Id: I95d61f9003c708ff5e149c6c030ef10adb14c6df Reviewed-on: https://skia-review.googlesource.com/c/skia/+/231679 Reviewed-by: Mike Klein <mtklein@google.com> Commit-Queue: Mike Klein <mtklein@google.com> |
||
---|---|---|
.. | ||
fm_bot | ||
fm.cpp |