= Сообщение: 3084 из 3632 ======================================== RU.GOLDED = От : Nil A 2:5015/46 28 Oct 23 08:27:04 Кому : Vitaliy Aksyonov 28 Oct 23 08:27:04 Тема : Заезды по памяти по F1 FGHI : area://RU.GOLDED?msgid=2:5015/46+653c9e9b На : area://RU.GOLDED?msgid=1:104/117+653c8d91 = Кодировка сообщения определена как: CP866 ================================== Ответ: area://RU.GOLDED?msgid=2:5015/46+653ca44d ============================================================================== Hello, Vitaliy!
Friday October 27 2023 22:25, from Vitaliy Aksyonov -> Nil A:
NA>> Глобальные переменные - это зло. огда мы отрабатываем клавишу NA>> ESC, то esc_esc() вычистит себя, и doubly-linked list останется NA>> пустым, т.е. gkbd->onkey уже освобождённым оказывается.
VA> Можешь вкратце описать, в чём проблема и как твой фикс её решает? Патч VA> подготовлю.
gkbd - глобальный объект для работы с вводом. Синглтон напрашивается, но тут просто глобал. gkbd->onkey - doubly linked list какие мы готовы обрабатывать клавиши с их колбеками. Там цикл по этому листу, если совпало, то вызываем колбек. Проблема случается в F1 помощи, если нажимать pageup, pagedown, esc клавиши. Запуститься их обработчик, например, esc_esc(), который первым делом вызовет setonkey(Key_Esc,NULL,0) и уберёт себя из этого linked list. Далее там в getxch() стоит break после обработки, а потом if, чтобы key to pass back, 0=don't pass. Главное, что в этом месте esc_esc() был единственным в linked list, поэтому он весь и освобождается, считай весь gkbd->onkey nullptr. Это ещё Одинновский баг там похоже. Ни у кого не падает, потому что освобождается и тут же используется снова, там просто других маллоков нет рядом, поэтому память не трогается никем больше.
Best Regards, Nil --- GoldED+/LNX 1.1.5 * Origin: Linux 2.6.32-042stab145.3 (2:5015/46)