Все дело, как ее готовить
Вот цепочка вызовов
modified()->visible()->leave()->modified()->visible()->возврат в modified()->"M"->возврат в Leave()->"L"->возврат в visible()->leave()->"L"->возврат в modified()->"M"
Получается, что visible() дважды вызывает leave(). Точнее даже не так. В первый раз вызывается leave(), а во второй Leave()