RefProcPhase1Task uses WorkerThread::id() to select the list to process. After the recent changes to how WorkGang works[1], this no longer guarantees that all reference lists are processed. This in turn means we might kill SoftReferences even when the policy says they should be kept alive.
The fix here would be to use the worker_id passed into the Task's work() function instead of using WorkerThread::id().
[1] There's no longer any guarantee that all GangWorker threads will execute the Task's work() function, since a quick-to-wakeup worker thread might steal the work intended for a slow-to-wakeup worker thread.
The fix here would be to use the worker_id passed into the Task's work() function instead of using WorkerThread::id().
[1] There's no longer any guarantee that all GangWorker threads will execute the Task's work() function, since a quick-to-wakeup worker thread might steal the work intended for a slow-to-wakeup worker thread.