Если честно, попахивает возможными ошибками (пока не могу сказать какими, просто gut feeling).
Да и чувствовать я себя буду гораздо спокойнее, если моя логика не будет зависеть от того, сколько раз выполнилась функция)
я фиг сколько лет назад делал нечто подобное и очень похожим способом - работало долго и надежно.
плюс в том, что все ключевые моменты видны на одном экране и просмотрев их хорошо можно не опасаться разных сюрпризов.