b6a0fd5b lied in what it did, do as promised.

If still starting, exit(1) straight away, if already running, stop,
also stop if unexpected state.
Convert assert() to either WARN/FATAL and return.
Always log the function name, we already log a lot.
There's no reason to malloc+free the log buffer, we can use stack.

(Even better probably would be per-thread buffer.)
Since we know log the __func__, drop it from messages.
Make disk writer join failure fatal.
Make the 'no workers' case into a TODO.