Page 2 of 3
LuaMacro — Lua как язык макросов
Posted: Mon 02 Feb, 2015 16:23
by John Doe
Latest post of the previous page:
Уже несколько раз сталкиваюсь с ошибкой, возникающей после запуска процесса поиска (вызванного по AltF7):
Code: Select all
╔═══════════════════════════════════════════════════ Error ════════════════════════════════════════════════════╗
║ C:\Apps\Far3\Plugins\LuaMacro\LuaMacro.dll: ║
║ C:\Apps\Far3\Profile\Macros\scripts\Menu\MenuAutoFilter.lua:87: attempt to index local 'param' (a nil value) ║
║ stack traceback: ║
║ C:\Apps\Far3\Profile\Macros\scripts\Menu\MenuAutoFilter.lua:87: in function 'condition' ║
║ C:\Apps\Far3\Plugins\LuaMacro\utils.lua:148: in function <C:\Apps\Far3\Plugins\LuaMacro\utils.lua:141> ║
║ [C]: in function 'FileExists' ║
║ ...pps\Far3\Profile\Macros\scripts\PickPathFromOtherFAR.lua:20: in function <...pps\Far3\Profile\Macros\ ║
║ scripts\PickPathFromOtherFAR.lua:18> ║
╟──────────────────────────────────────────────────────────────────────────────────────────────────────────────╢
║ { OK } ║
╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
Повторяется нестабильно.
Место ошибки -
MenuAutoFilter.lua, обработчик диалогового события
condition=function(Event,param)
.
param
здесь по документации таблица, и я не пойму откуда может взяться
nil
.
И вторая непонятная для меня вещь, это третий уровень стека
[C]: in function 'FileExists'
(
PickPathFromOtherFAR.lua)
Здесь FileExists==win.GetFileAttr, и функция вызывается по таймеру с интервалов 50 мс.
Как это всё вообще оказывается в одном стеке мне неясно.
LuaMacro — Lua как язык макросов
Posted: Mon 02 Feb, 2015 16:46
by John Doe
Не знаю насколько это вообще связано, но LuaMacro у меня падает нередко и не выдавая сообщений.
Обычно при поиске, или в процессе скачивания обновления плагином UpdateEx.
Есть ли общие причины у всех разнообразных падений выяснить проблематично, т.к. падает нестабильно.
Но знаю один верный способ: в PickPathFromOtherFAR.lua уменьшить интервал до
1
, и запустить поиск.
Падает (или виснет) если не с первой попытки, то со второй или третьей.
P.S.
В логах иногда страшное:
Code: Select all
Exceptiontion in [C:\Apps\Far3\Plugins\LuaMacro\LuaM.alcro.dll] pl
ugin.
LuaMacro — Lua как язык макросов
Posted: Mon 02 Feb, 2015 16:53
by Shmuel
John Doe wrote: Уже несколько раз сталкиваюсь с ошибкой, возникающей после запуска процесса поиска (вызванного по AltF7):
У меня эти макросы не установлены, с их кодом я не знаком, поэтому ничего не могу сказать. Не исключено, что причина связана с тем, что Фар при поиске AltF7 вызывает ProcessDialogEventW плагина из неосновного потока (см. на эту тему комментарий к билду 127 плагина LuaMacro).
John Doe wrote: Не знаю насколько это вообще связано, но LuaMacro у меня падает нередко и не выдавая сообщений.
А вот у меня такого не было
ни разу.
LuaMacro — Lua как язык макросов
Posted: Mon 02 Feb, 2015 17:12
by John Doe
Shmuel wrote: У меня эти макросы не установлены, с их кодом я не знаком, поэтому ничего не могу сказать.
Вот выжимка из этих макросов:
Code: Select all
Event { group="DialogEvent";
condition=function(Event,param)
local input = param.Param2
end;
action=function(Event,param)
end;
}
Code: Select all
local taskfile = win.GetEnv"TEMP"..[[\FARTasks\getpaths.task]]
local FileExists = win.GetFileAttr
local timer=far.Timer(1,function(timer)
timer.Enabled = false
FileExists(taskfile)
timer.Enabled = true
end)
Event { group="ExitFAR"; action=function() timer:Close() end; }
И теперь попробуйте интервал таймера уменьшить до 1. Удаётся завалить плагин?
LuaMacro — Lua как язык макросов
Posted: Mon 02 Feb, 2015 17:27
by Shmuel
1. Хоть разок бы прогнали, прежде чем мне предлагать (taskname -- taskfile)
2. Не указано, откуда запускается второй кусок кода. Я запускаю файл с комстроки - ничего не происходит, в т.ч. при установке интервала таймера в 1.
LuaMacro — Lua как язык макросов
Posted: Mon 02 Feb, 2015 17:33
by John Doe
Я исправил код, но как выяснилось опоздал (
Оба куска можно объединить в одном файле, загружаемом из scripts.
При установке в 1 на моей машине достаточно несколько раз запустить поиск для падения.
Но возможно другие скрипты влияют, поищу.
Edit
3.0.4260 x86 из ночных сборок, с единственным плагином, и единственным скриптом тоже падает.
LuaMacro — Lua как язык макросов
Posted: Mon 02 Feb, 2015 17:46
by Shmuel
LuaMacro — Lua как язык макросов
Posted: Mon 02 Feb, 2015 18:02
by Shmuel
John Doe wrote: 3.0.4260 x86 из ночных сборок, с единственным плагином, и единственным скриптом тоже падает.
Попробовал и это - не падает.
Допускаю, что падать может. В своё время была сделана защита на OpenW, а защита на ProcessSynchroEventW (используемую таймером LuaFAR) сделана не была.
Мне кажется более правильным исправлением было бы, чтобы Фар не вызывал экспортируемые функции плагинов из разных потоков в одно и то же время (точнее, с перекрытием по времени).
Ради интереса, попробуйте вариант плагина с защитой на ProcessSynchroEventW.
LuaMacro — Lua как язык макросов
Posted: Tue 03 Feb, 2015 10:13
by John Doe
Shmuel wrote: Запускал поиск раз 20, как маленький, так и большой (~ 50000 файлов).
У меня падает сразу же после начала поиска.
Подозреваю что в момент нахождения первого файла, т.к. при этом в списке найденного ещё ничего нет, но кнопки уже разблокированы.
Shmuel wrote:Попробовал также изменить имя файла 'taskfile' на существующий у меня - ничего не изменилось.
В моём случае файла не существует.
Shmuel wrote: Ради интереса, попробуйте вариант плагина с защитой на ProcessSynchroEventW
Этот тоже удалось пару раз завалить, но падает намного реже.
LuaMacro — Lua как язык макросов
Posted: Tue 03 Feb, 2015 10:15
by John Doe
А что можно предположить по поводу ошибки индексирования param?
Code: Select all
Event { group="DialogEvent";
condition=function(Event,param)
local input = param.Param2
end;
action=function(Event,param)
end;
}
(С обсуждаемыми выше падениями это не связано, падает без этого обработчика)
LuaMacro — Lua как язык макросов
Posted: Tue 03 Feb, 2015 10:25
by Shmuel
Покуда у меня не появится воспроизводимый test-case, практически не о чем говорить.
Попозже попробую ещё поиграться на Windows 7.
LuaMacro — Lua как язык макросов
Posted: Wed 04 Feb, 2015 22:50
by Shmuel
Воспроизводимый test-case у меня появился. Для этого достаточно было в макрофайл вставить far.SubscribeDialogDrawEvents(true)
. Стало часто падать при поиске AltF7. Но с той luamacro.dll, которая выложена несколькими постами выше, пока ни разу не упало.
LuaMacro — Lua как язык макросов
Posted: Thu 05 Feb, 2015 10:13
by John Doe
Shmuel wrote: Стало часто падать при поиске AltF7.
Ещё одно падучее место — диалог плагина UpdateEx, после нажатия Download.
Сейчас попробовал, и там практически сразу воспроизвелась проблема, о которой я писал выше: в обработчик DialogEvent не пришли параметры (т.е. Event==nil и param==nil)
LuaMacro — Lua как язык макросов
Posted: Thu 05 Feb, 2015 10:38
by Shmuel
Причина ясна: Фар вызывает экспортируемые функции (или одну и ту же функцию, ProcessDialogEventW) одного и того же плагина из разных потоков, не дожидаясь возврата плагина из предыдущего вызова. Сам Фар категорически запрещает плагинам делать подобное. Я рассматриваю это, как баг Фара, место которому - на мантисе.
Чинить надо Find File
Posted: Fri 06 Feb, 2015 10:40
by John Doe
Чинить надо Find File
Posted: Mon 16 Apr, 2018 16:53
by 2useven10
Аналогичная ситуация с acrlite
Из 2-х потоков зовётся GetOpenPanelInfoW и падает при одновременном изменении стринга.
Имеет ли смысл ставить защиту в плагине (в этой ф-и или во всех эксортируемых) или можно ждать починки поиска?