The EngineWorkerScheduler previously would not schedule a job that had been set as active. Now that it does not have a way to check if the worker is active, it will queue the worker after EngineWorker::workReady() is called regardless of whether one is running or not. This means that the implementation of the EngineWorker has to enforce that workReady() only be called when the EngineWorker is not running already. You've done this in CachingReaderWorker with a mutex.