onPHP/onphp-framework — pull request #184 by vatt2001 (2013-03-26 12:03:27+00:00)
Title: SmartDaoWorker race condition bug fix

Проблема возникает тогда, когда один процесс очищает кеш и делает SmartDaoWorker::uncacheLists(), в котором не получает лок на пул ($pool->get($intKey) = false) и просто удаляет из кеша всю карту с листами ($cache->delete($this->indexKey)), а при этом второй процесс параллельно, получив заветный лок на пул ($pool->get($intKey) = true), в конце метода SmartDaoWorker::syncMap() восстанавливает прочитанную ранее и удаленную первым процессом карту с листами с устаревшим значением кеша ($cache->set($this->indexKey, $map).

Это лечится вызовом $cache->replace() вместо $cache->set() в SmartDaoWorker::syncMap() для ранее существовавших карт.