Спасибо большое murdemon за помощь и vniko за рекомендации.
Проблему зависания удалось решить отказом от циклов while, которые съедали время основного цикла. Обошелся одними условиями. Отныне только последовательный код, который всегда приводит к последней строчке перед ключевым словом return.