Да, спасибо за наводку, разобрался.
Глючат функции переключения банок - map_*. В паре мест там есть вероятность, что если в процессе работы произойдет прерывание, то предыдущее (временно сохраненное) значение аккумулятора пропадет. А т.к. эти функции дергаются кучу раз в цикле, то вероятность крайне велика.
Можно добавить DI везде в начале всех map_*. А можно более радикально - я переписал всё обратно на использование стека. Делал на переменных с тем, чтобы однажды перекинуть UDATA в банкуемую область, но ну нафиг, хоть бы сначала то, что есть, отладить
Сейчас логин всегда проходит и шелл всегда стартует. Но при попытке что-нибудь запустить всё гарантированно виснет. Надо дальше ковырять.






Ответить с цитированием