View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001604 | Far Manager | Plugins API | public | 2010-11-26 23:40 | 2012-01-29 12:30 |
Reporter | Maximus | Assigned To | zg | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Platform | x86 | OS | Windows | OS Version | 7 |
Product Version | 2.0 | ||||
Fixed in Version | 3.0 | ||||
Summary | 0001604: Падение в PluginSynchro::Process если плагин уже выгружен | ||||
Description | Происходит следующее 1. пользователь вводит в ком.строке "unload:<плагин>" 2. в это же время плагин вызывает ACTL_SYNCHRO 3. после этого происходит выгрузка плагина, вызывается ExitFarW 4. запускается цикл PluginSynchro::Process, в котором используется дескриптор уже выгруженного плагина хорошо бы перед вызовом pPlugin->ProcessSynchroEvent проверять валидность pPlugin... например, как в патче | ||||
Tags | No tags attached. | ||||
Build | 1842 | ||||
|
101126.diff (1,568 bytes)
Index: synchro.cpp =================================================================== --- synchro.cpp (revision 5274) +++ synchro.cpp (working copy) @@ -35,6 +35,7 @@ #include "synchro.hpp" #include "plclass.hpp" #include "plugin.hpp" +#include "ctrlobj.hpp" #include "adminmode.hpp" @@ -95,7 +96,8 @@ { Plugin* pPlugin=(Plugin*)module; - if (pPlugin) + // ���� �� ��������� ��������� pPlugin. �� ��� �� ������� (�������� ����� FarCmd -> unload:) + if (pPlugin && CtrlObject->Plugins.IsPluginValid(pPlugin)) { pPlugin->ProcessSynchroEvent(SE_COMMONSYNCHRO,param); res=true; Index: plugins.cpp =================================================================== --- plugins.cpp (revision 5274) +++ plugins.cpp (working copy) @@ -484,6 +484,20 @@ return nullptr; } +bool PluginManager::IsPluginValid(Plugin *pPlugin) +{ + Plugin *pTest; + + for (int i = 0; i < PluginsCount; i++) + { + pTest = PluginsData[i]; + if (pTest == pPlugin) + return true; + } + + return false; +} + void PluginManager::LoadPlugins() { TaskBar TB(false); Index: plugins.hpp =================================================================== --- plugins.hpp (revision 5274) +++ plugins.hpp (working copy) @@ -200,6 +200,7 @@ Plugin *GetPlugin(const wchar_t *lpwszModuleName); Plugin *GetPlugin(int PluginNumber); + bool IsPluginValid(Plugin *pPlugin); int GetPluginsCount() { return PluginsCount; } int GetOemPluginsCount() { return OemPluginsCount; } |
|
Патч был выложен более года назад. Реакция - нулевая, почему? |
|
Видимо в общей массе потерялся :-) |
|
Ну это какой то костыль, надо как то лучше сделать мне кажеться. |
|
вообще-то баг исправлен в zg 09.02.2011 03:42:44 +0200 - build 1842 |
Date Modified | Username | Field | Change |
---|---|---|---|
2010-11-26 23:40 | Maximus | New Issue | |
2010-11-26 23:40 | Maximus | File Added: 101126.diff | |
2011-12-31 10:49 | Maximus | Note Added: 0008298 | |
2011-12-31 14:20 | vskirdin | Note Added: 0008300 | |
2011-12-31 14:53 | alexy | Note Added: 0008301 | |
2011-12-31 14:53 | alexy | Assigned To | => zg |
2011-12-31 14:53 | alexy | Status | new => assigned |
2012-01-29 12:03 | zg | Note Added: 0008501 | |
2012-01-29 12:30 | alexy | Build | => 1842 |
2012-01-29 12:30 | alexy | Status | assigned => closed |
2012-01-29 12:30 | alexy | Resolution | open => fixed |
2012-01-29 12:30 | alexy | Fixed in Version | => 3.0 |