michaellukashov / Far-NetBox

SFTP/SCP/FTP/FTPS/WebDAV/S3 client for Far Manager 3 (http://farmanager.com/)
https://forum.farmanager.com/viewtopic.php?t=6317
GNU General Public License v2.0
161 stars 52 forks source link

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

Open xtemp09 opened 4 years ago

xtemp09 commented 4 years ago

Специально поставил 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<,, > (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!::operator() (C:\temp\FarManager-ci-v3.0.5625.1628\far\main.cpp:822) 0x0013FCC6F9E Far.exe!seh_invoke<,, > (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

VictorVG commented 4 years ago

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

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

xtemp09 commented 4 years ago

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

VictorVG commented 4 years ago

@xtemp09

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

xtemp09 commented 4 years ago

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

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

VictorVG commented 4 years ago

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

xtemp09 commented 4 years ago

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

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

VictorVG commented 4 years ago

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