Проблема с serialize и __sleep

Как всем наверное известно в РНР5 перед сериализацией объекта вызывается __sleep.
В исходном коде движка ни одного слипа я не нашел. Но, что происходит внутри — удивляемся:
Дело в кеше доходит до сериализации и вызывается __sleep, функции, которой в ни в одном классе нет.
После этого делается TopicEntity_Topic->__call('__sleep', Array) — видимо где-то стоит какой-то хук на вызов неизвестных функций. И пошло-поехало —

	/**
	 * Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
	 */
	public function __call($sName,$aArgs) {
		return $this->oEngine->_CallModule($sName,$aArgs);
	}

Модуль не находится, лезут ошибки, эксепшены и т.п.
Вопрос — как на PHP5 нормально настроить кеширование? Как убрать все эти псевдо-нужные хуки (а они видимо здорово по коду раскиданы)?

Ниже собственно трасер ошибки:

<b>Fatal error</b>:  Uncaught exception 'Exception' with message 'Не найден класс модуля - ' in /var/www/web674/web/classes/engine/Engine.class.php:97
Stack trace:
#0 /var/www/web674/web/classes/engine/Engine.class.php(97): Engine::LoadModule()
#1 /var/www/web674/web/classes/engine/Engine.class.php(185): Engine->LoadModule('', true)
#2 /var/www/web674/web/classes/engine/Entity.class.php(61): Engine->_CallModule('__sleep', Array)
#3 /var/www/web674/web/classes/modules/sys_cache/Cache.class.php(129): TopicEntity_Topic->__call('__sleep', Array)
#4 /var/www/web674/web/classes/modules/sys_cache/Cache.class.php(129): TopicEntity_Topic->__sleep()
#5 /var/www/web674/web/classes/modules/sys_cache/Cache.class.php(129): serialize(Array)
#6 /var/www/web674/web/classes/engine/Engine.class.php(189) : eval()'d code(1): LsCache->Set(Array, 'topic_filter_a:...', Array, 300)
#7 /var/www/web674/web/classes/engine/Engine.class.php(189): eval()
#8 /var/www/web674/web/classes/engine/Module.class.php(37): Engine->_CallModule('Cache_S in <b>/var/www/web674/web/classes/engine/Engine.class.php</b> on line <b>97</b><br />

Механизм хуков в движке

В продолжении топиков LiveStreet как платформа для модулей и Тест хуков в движке появилась поддержка хуков.

Использовать можно так:
1. В любом месте(модуле, экшене) установить вызов необходимого хука на метод модуля
$this->Hook_AddExecModule('topic_show','Test_MyHookRun',10);
регистрирует на событие topic_show вызов метода MyHookRun у модуля Test с приоритетом 10.
2. В любом месте установить вызов хука на функцию
$this->Hook_AddExecFunction('topic_show','var_dump',-5);
регистрирует вызов функции var_dump
3. Создать класс хука в каталоге /classes/hooks/ с именем файла HookTest.class.php с содержанием
<? 
class HookTest extends Hook {	
	public function RegisterHook() {
		$this->AddHook('topic_show','testHookFunct',__CLASS__,-3);
	}
	
	public function testHookFunct($aVars) {
		var_dump("Hook it!");
	}
}
?>

Читать дальше →