Добро пожаловать, Гость. Пожалуйста авторизуйтесь здесь.
FGHIGate на GaNJa NeTWoRK ST@Ti0N - Просмотр сообщения в эхоконференции RU.GOLDED
Введите FGHI ссылку:


Присутствуют сообщения из эхоконференции RU.GOLDED с датами от 16 Jul 13 03:28:02 до 27 Jun 24 12:59:36, всего сообщений: 3580
Ответить на сообщение К списку сообщений Предыдущее сообщение Следующее сообщение
= Сообщение: 3084 из 3580 ======================================== 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>> diff --git a/goldlib/gcui/gkbdgetm.cpp
NA>> b/goldlib/gcui/gkbdgetm.cpp
NA>> --- a/goldlib/gcui/gkbdgetm.cpp
NA>> +++ b/goldlib/gcui/gkbdgetm.cpp
NA>> @@ -310,6 +310,7 @@ gkey getxch(int __tick)
NA>>                      if(gkbd->inmenu and gmou.FreeCursor())
NA>>                          return 0;
NA>>  #endif
NA>> +                    _onkey = gkbd->onkey;
NA>>                      break;
NA>>                  }
NA>>                  _onkey = _onkey->prev;

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)

К главной странице гейта
Powered by NoSFeRaTU`s FGHIGate
Открытие страницы: 0.024876 секунды