Far-NetBox icon indicating copy to clipboard operation
Far-NetBox copied to clipboard

Ошибка при закрытии

Open xtemp09 opened this issue 4 years ago • 7 comments

Специально поставил MSVC на виртуальную машину, откомпибляндил Far, так что пишу как повторить ошибку.

  1. Подсоединиться по SFTP куда-нибудь
  2. Добиться исчезновения соединения (появления сообщения о переподключении)
  3. Закрыть Far

Ошибка:

0x7FEE4DE8A25 NetBox.dll!fmt::internal::BasicData::operator= 0x7FEE4F67E9F NetBox.dll!tinylog::TinyLog::Write 0x7FEE4F2BA60 NetBox.dll!tinylog::TinyLog::Write 0x7FEE4F2AA41 NetBox.dll!tinylog::TinyLog::Write 0x00077AEB9F3 ntdll.dll!RtlRestoreContext 0x7FEE4DF30DC NetBox.dll!fmt::internal::BasicData::operator= 0x7FEE4E01F92 NetBox.dll!ProcessPanelEventW 0x0013FD03BAE Far.exe!Plugin::ExecuteFunctionSeh<Plugin::ExecuteStruct<20,1>,ProcessPanelEventInfo * &> (C:\temp\FarManager-ci-v3.0.5625.1628\far\plclass.hpp:338) 0x0013FD0263E Far.exe!seh_invoke<<lambda_14bf981d6d2e4381e174749caf7cbfa5>,<lambda_011a09448d229acd9fb5df1cc73d9924>,<lambda_b674bb48975694a0ffc14b230655c340> > (C:\temp\FarManager-ci-v3.0.5625.1628\far\exception_handler.hpp:88) 0x0013FD00042 Far.exe!Plugin::ProcessPanelEvent (C:\temp\FarManager-ci-v3.0.5625.1628\far\plclass.cpp:961) 0x0013FC2960C Far.exe!FileList::ProcessPluginEvent (C:\temp\FarManager-ci-v3.0.5625.1628\far\filelist.cpp:6351) 0x0013FC2C959 Far.exe!FileList::UpdateIfChanged (C:\temp\FarManager-ci-v3.0.5625.1628\far\filelist.cpp:6846) 0x0013FCA4885 Far.exe!GetInputRecordImpl (C:\temp\FarManager-ci-v3.0.5625.1628\far\keyboard.cpp:929) 0x0013FCA50FE Far.exe!GetInputRecord (C:\temp\FarManager-ci-v3.0.5625.1628\far\keyboard.cpp:1119) 0x0013FCCAB77 Far.exe!Manager::ProcessMainLoop (C:\temp\FarManager-ci-v3.0.5625.1628\far\manager.cpp:631) 0x0013FCCA9E6 Far.exe!Manager::EnterMainLoop (C:\temp\FarManager-ci-v3.0.5625.1628\far\manager.cpp:617) 0x0013FCC2901 Far.exe!MainProcess (C:\temp\FarManager-ci-v3.0.5625.1628\far\main.cpp:313) 0x0013FCC6940 Far.exe!mainImpl (C:\temp\FarManager-ci-v3.0.5625.1628\far\main.cpp:752) 0x0013FCC6E40 Far.exe!wmain_seh (C:\temp\FarManager-ci-v3.0.5625.1628\far\main.cpp:786) 0x0013FCC6F57 Far.exe!<lambda_797f9b4d01764550640b73f73df2b8d6>::operator() (C:\temp\FarManager-ci-v3.0.5625.1628\far\main.cpp:822) 0x0013FCC6F9E Far.exe!seh_invoke<<lambda_797f9b4d01764550640b73f73df2b8d6>,<lambda_58096a58d19206686715aeeb96a234a7>,<lambda_4975ec3e3b192a559fe63b98ad6842a1> > (C:\temp\FarManager-ci-v3.0.5625.1628\far\exception_handler.hpp:88) 0x0013FCC6F16 Far.exe!main (C:\temp\FarManager-ci-v3.0.5625.1628\far\main.cpp:829) 0x0013FDAD9E0 Far.exe!__scrt_common_main_seh (d:\A01_work\6\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288) 0x0007797556D kernel32.dll!BaseThreadInitThunk 0x00077AD372D ntdll.dll!RtlUserThreadStart

Terminate the process (Y/N)?

Прилагаю лог NetBox. В данном случае подключение было к моему телефону. Redmi.log

xtemp09 avatar Jun 24 '20 08:06 xtemp09

Я обратил внимание на строки 153 - 155 лога - хост запрашивает логин и пароль, но не получает их т.к. в этот момент судя по вашему описанию выполняется процедура завершения фар-а, и выделенная ОС процессу память содержит мусор, а т.к. плагин ждёт ввода с клавиатуры пытаясь прочитать входную очередь, то вполне естественно что он падает.

Точно так же в любой ОС поведёт себя любой дочерний процесс коли родительский процесс его задачи будет находится в состоянии завершения. Это классический случай "оператор выполнил некорректные действия и задача упала". Другое дело, что именно такой сценарий встречается крайне редко, а потому про защиту от него разработчики часто забывают , хотя наверное стоило бы добавить её в и в плагин и сам фар, но тут надо посмотреть "насколько вероятен данный сценарий?" чтобы не превратить защиту от случайности в самоцель на случай "а чтобы было!.

VictorVG avatar Jun 24 '20 13:06 VictorVG

Скорее всего, да. Этот сценарий имеет большущую вероятность, потому что соединение прекращается довольно часто, и я часто нажимаю на крестик в правом-верхнем углу фара.

xtemp09 avatar Jun 25 '20 06:06 xtemp09

@xtemp09

Тогда, раз есть такая возможность, то я бы посмотрел настройки сервера в самом телефоне, либо как вариант воспользовался Ghost Commander + SMBPlugin (у него GPL лицензия, но на каждой машине должны быть уникальный логин и пароль либо он не сможет с ней соединится - уже нарывался с планшетами и телефонами) либо воспользоваться X-plore File Manager (условно-бесплатный, без оплаты блокируется часть функций, но LAN/FTP доступны) - у него нет проблем с логинами и паролями, так что в плане замены громоздкого софта от производителя он удобнее.

VictorVG avatar Jun 25 '20 14:06 VictorVG

Причину прекращения соединения я знаю ― телефон отключает ES File Explorer для экономии энергии. Так же, видимо, он экономит Wi-fi.

3a список программ ― спасибо, посмотрю.

xtemp09 avatar Jun 26 '20 05:06 xtemp09

А, с ним фокус известен. Я в таких случаях свой на зарядку ставлю и батарея не садится.

VictorVG avatar Jun 26 '20 11:06 VictorVG

Я имел ввиду политику Android. (= Он отключает программы для энергосбережения, кроме тех, которым разрешено работать. Исправляется в два тыка, но я не хочу.

Когда автор дополнения рассмотрит этот баг?

xtemp09 avatar Jun 27 '20 18:06 xtemp09

Когда у него время будет. Пока он занят у самого есть вопросы, жду.

VictorVG avatar Jun 27 '20 21:06 VictorVG