View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002940 | Far Manager | Plugins API | public | 2015-02-13 07:50 | 2018-11-09 18:26 |
Reporter | JohnDoe | Assigned To | DrKnS | ||
Priority | normal | Severity | minor | Reproducibility | sometimes |
Status | closed | Resolution | fixed | ||
Product Version | 3.0 | ||||
Fixed in Version | 3.0 | ||||
Summary | 0002940: SCTL_CREATE: проблемы при создании более одного экземпляра настроек | ||||
Description | Проблема проявляется при одновременной попытке доступа к одной и той же базе плагина (например если запущены несколько экземпляров фара). Если команда SCTL_CREATE вызвана повторно (до того, как первый экземпляр выполнил SCTL_FREE), то созданный им описатель похоже никак не связан с реальной базой. Такое впечатление, что дальнейшая работа проводится с пустой базой: в неё можно записать, и записанное без проблем прочитать, но после SCTL_FREE всё исчезает, так и не попав в файл базы. | ||||
Steps To Reproduce | local F = far.Flags local Guid = win.Uuid"4EBBEFC8-2084-4B7F-94C0-692CE136894D" far.FreeSettings() local S1 = far.CreateSettings(Guid,F.PSL_ROAMING) --возьмём любой параметр из реальной базы --(неважно был ли он раньше, или создан прямо тут) --S1:Set(F.FSSF_ROOT, "test1", F.FST_STRING, "aaa") --создадим второй экземпляр настроек local S2 = far.CreateSettings(Guid,F.PSL_ROAMING) --первый больше не нужет, далее работаем со вторым S1:Free() --попробуем прочитать существующий параметр local Value1 = S2:Get(F.FSSF_ROOT, "test1", F.FST_STRING) --запишем в него другое значение S2:Set(F.FSSF_ROOT, "test1", F.FST_STRING, "bbb") --удостоверимся что оно записалось local Value2 = S2:Get(F.FSSF_ROOT, "test1", F.FST_STRING) --теперь освободим настройки, и для чистоты эксперимента создадим новые S2:Free() local S3 = far.CreateSettings(Guid,F.PSL_ROAMING) --прочитаем что же в реальной базе local Value3 = S3:Get(F.FSSF_ROOT, "test1", F.FST_STRING) S3:Free() ----------------------------- far.Show(Value1,Value2,Value3) --Value1 будет nil, хотя в реальной базе значение есть --Похоже работаем с пустой базой (то же самое покажет и SCTL_ENUM) --Value2 будет "bbb" --Value3 будет "aaa", это означает что наша работа с вторым экземпляром настроек никак не отразилась на реальной базе | ||||
Additional Information | http://api.farmanager.com/ru/service_functions/settingscontrol.html http://forum.farmanager.com/viewtopic.php?p=128011#p128011 | ||||
Tags | SettingsControl | ||||
Build | 5304 | ||||
|
Возможно, что не допускается одновременная работа по записи в базу от более, чем одного описателя с одинаковым гуидом. Проверить это предположение можно, изменив один из гуидов, например, взяв второй гуид от плагина LuaFAR Search. Проверку при этом можно производить по-прежнему только в одном из плагинов, но установлены должны быть оба. |
|
>не допускается одновременная работа В этом и состоит баг. Если тут есть какие-то ограничения sqlite, то фар обязан или обходить их сам, или сигнализировать об ошибке. >работа по записи Из кода должно быть видно, что достаточно SCTL_CREATE без SCTL_FREE >Возможно, что не допускается одновременная работа по записи в базу от более, чем одного описателя с одинаковым гуидом. Разумеется, проблема только в случае если гуид и соответственно база одни и те же. |
|
5304 |
Date Modified | Username | Field | Change |
---|---|---|---|
2015-02-13 07:50 | JohnDoe | New Issue | |
2015-02-13 08:07 | shmuel | Note Added: 0013499 | |
2015-02-13 11:16 | JohnDoe | Note Added: 0013500 | |
2018-10-30 12:23 | JohnDoe | Tag Attached: SettingsControl | |
2018-11-06 22:22 | DrKnS | Assigned To | => DrKnS |
2018-11-06 22:22 | DrKnS | Status | new => feedback |
2018-11-06 22:22 | DrKnS | Note Added: 0016296 | |
2018-11-07 09:14 | JohnDoe | Status | feedback => resolved |
2018-11-09 18:26 | DrKnS | Status | resolved => closed |
2018-11-09 18:26 | DrKnS | Resolution | open => fixed |
2018-11-09 18:26 | DrKnS | Fixed in Version | => 3.0 |
2018-11-09 18:26 | DrKnS | Build | => 5304 |