Фар падает по ACTL_QUIT начиная со сборки 6146 Topic is solved

Здесь можно сообщить о найденных багах в Far.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Фар падает по ACTL_QUIT начиная со сборки 6146

Post by buniak_a_h »

Есть у меня скрипт. Он прекрасно работал в версиях до 6146 (в версии 6144 всё было прекрасно). А начиная с версии 6146 при выходе из ФАРа формируется дамп и происходит краш. Особенностью этого скрипта является то, что на финальное окно подтверждения выхода из ФАРа повешен обработчик события; если его убрать, краш пропадает.
Я постарался убрать всё "лишнее" (не влияющее на краш) и вот что получилось:


Разница между вариантами только в наличии функции VersCompare (которая, к слову сказать, не вызывается!). Т.к. логикой объяснить этот вылет я не могу, то не стал убирать и "мёртвые" куски кода. Во вложении - дамп.
Crash.7z
(110.99 KiB) Downloaded 28 times
Вопрос: это что-то сломалось в ФАРе, я делаю что-то некорректное, но ранее терпимое ФАРом, или это совсем уж грубая моя ошибка?
Last edited by HaRT on Sat 20 May, 2023 23:36, edited 3 times in total.
Reason: Исправлен заголовок Темы
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Непонятка начиная с версии 6146

Post by buniak_a_h »

P/S. Забыл написать номера строк той функции, которая, не будучи ни разу вызванной, "выбивает" ФАР. Это строки 68-89. Их можно просто закомментировать - и краш пропадает.
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Непонятка начиная с версии 6146

Post by zg »

где я должен ваши модули брать?
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Непонятка начиная с версии 6146

Post by buniak_a_h »

zg wrote: Sat 20 May, 2023 10:43 где я должен ваши модули брать?
Ой, забыл…
modules.7z
(22.97 KiB) Downloaded 31 times
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Непонятка начиная с версии 6146

Post by zg »

насколько я понял идею 6139 и 6145, для того, чтобы в макросах в ExitFAR работало, то что раньше не работало, для luamacro ExitFAR вызывается чуть раньше. не знаю какие проблемы это может повлечь в целом, но в данном случае по ACTL_QUIT зовётся luamacro'вский ExitFAR, в нём удаляется глобальное lua состояние, а дальше при попытке получить что-нибудь от luamacro фар иногда падает. 2useven10, правильно ли я понял вашу идею?
2useven10
Posts: 5210
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Непонятка начиная с версии 6146

Post by 2useven10 »

zg, Да, всё правильно. Раньше 'иногда падал' при обработке события ExitFAR.
В нагромождения буниака я глубоко не вникал, но ожидать работоспособности макросистемы после посылки ACTL_QUIT пожалуй слишком оптимистично.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Непонятка начиная с версии 6146

Post by Shmuel »

zg wrote: Sat 20 May, 2023 13:18 по ACTL_QUIT зовётся luamacro'вский ExitFAR, в нём удаляется глобальное lua состояние, а дальше при попытке получить что-нибудь от luamacro фар иногда падает
Насколько я понимаю, глобальное lua состояние удаляется после того, как все обработчики ExitFAR завершили свою работу.
Причём LuaMacro при вызове его экспортируемых ф-ций всегда первым делом анализирует наличие "живого" lua состояния и возвращает Фару нейтральное значение (обычно 0), если состояние не создано или удалено.
Last edited by Shmuel on Sat 20 May, 2023 14:12, edited 1 time in total.
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Непонятка начиная с версии 6146

Post by zg »

Shmuel wrote: Sat 20 May, 2023 14:04 Насколько я понимаю, глобальное lua состояние удаляется после того, как все обработчики ExitFAR завершили свою работу.
там нет обработчиков ExitFAR. там DialogEvent на запрос о выходе из far'а. в нём ACTL_QUIT, который сейчас тут же зовёт ExitFAR у luamacro и в ExitFARW G.LS разрушается. дальше падает в недрах Open_Luamacro, вызванного из GetInputRecord и этот вызов произошёл до вызова ACTL_QUIT. обращение к освобождённой памяти. поэтому и падает не всегда.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Непонятка начиная с версии 6146

Post by Shmuel »

zg wrote: Sat 20 May, 2023 14:37 обращение к освобождённой памяти. поэтому и падает не всегда.
Есть вариант отвязки удаления lua_State от ExitFAR - удалять только в DllMain по приходу DLL_PROCESS_DETACH.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Непонятка начиная с версии 6146

Post by buniak_a_h »

2useven10 wrote: Sat 20 May, 2023 13:54 В нагромождения буниака я глубоко не вникал
Упростил скрипт до минималки:
2useven10 wrote: Sat 20 May, 2023 13:54 ожидать работоспособности макросистемы после посылки ACTL_QUIT
И какой теперь остался способ закрыть ФАР из макроса?Обратите внимание: вызов far.AdvControl(F.ACTL_QUIT) в этом скрипте - последнее действие.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Непонятка начиная с версии 6146

Post by buniak_a_h »

P/S. Подмена стандартного диалога подтверждения завершения работы ФАРа есть не только у меня. Это что, теперь все эти скрипты полетят?
2useven10
Posts: 5210
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Непонятка начиная с версии 6146

Post by 2useven10 »

Из макроса, насколько я понимаю, всё работает.
В подмене вашего диалога вообще можно обойтись без ACTL_QUIT.
И вызывать его в обработчике события, конечно, плохо.
Но наверное можно и с такими извращениями побороться.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Непонятка начиная с версии 6146

Post by buniak_a_h »

2useven10 wrote: Sat 20 May, 2023 19:41 Из макроса, насколько я понимаю, всё работает.
Не-не, этот мелкий макрос вызывает краш! Возможно, неустойчивый (хотя у меня 100% воспроизводится).
2useven10 wrote: Sat 20 May, 2023 19:41 можно обойтись без ACTL_QUIT
Вообще-то нельзя. Там был диалог и некоторые другие действия (которые я выбросил для облегчения понимания). Там было сохранение контекста, вывод несохранённых редакторов и возможность отказа от выхода из ФАРа. Так что это не лишнее
2useven10
Posts: 5210
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Непонятка начиная с версии 6146

Post by 2useven10 »

Shmuel wrote: Sat 20 May, 2023 15:30 Есть вариант отвязки удаления lua_State от ExitFAR - удалять только в DllMain по приходу DLL_PROCESS_DETACH.
Наверное это облегчит участь тех кто пилит сук на котором сидит.
Если есть время на патч, было бы здорово, если нет можно мне в личку целеуказание (если, zg, не сделает).
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Непонятка начиная с версии 6146

Post by Shmuel »

2useven10 wrote: Sat 20 May, 2023 20:11 Если есть время на патч, было бы здорово, если нет можно мне в личку целеуказание (если, zg, не сделает).
Это не совсем тривиальный патч. Давайте подождём хотя бы недельку, не будем пороть горячку :)
Post Reply

Return to “Глюки и баги”