View Issue Details

IDProjectCategoryView StatusLast Update
0002940Far ManagerPlugins APIpublic2018-11-09 18:26
ReporterJohnDoe Assigned ToDrKnS  
PrioritynormalSeverityminorReproducibilitysometimes
Status closedResolutionfixed 
Product Version3.0 
Fixed in Version3.0 
Summary0002940: SCTL_CREATE: проблемы при создании более одного экземпляра настроек
DescriptionПроблема проявляется при одновременной попытке доступа к одной и той же базе плагина (например если запущены несколько экземпляров фара).

Если команда SCTL_CREATE вызвана повторно (до того, как первый экземпляр выполнил SCTL_FREE), то созданный им описатель похоже никак не связан с реальной базой.

Такое впечатление, что дальнейшая работа проводится с пустой базой: в неё можно записать, и записанное без проблем прочитать, но после SCTL_FREE всё исчезает, так и не попав в файл базы.
Steps To Reproducelocal 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 Informationhttp://api.farmanager.com/ru/service_functions/settingscontrol.html
http://forum.farmanager.com/viewtopic.php?p=128011#p128011
TagsSettingsControl
Build5304

Activities

shmuel

2015-02-13 08:07

developer   bugnote:0013499

Возможно, что не допускается одновременная работа по записи в базу от более, чем одного описателя с одинаковым гуидом. Проверить это предположение можно, изменив один из гуидов, например, взяв второй гуид от плагина LuaFAR Search. Проверку при этом можно производить по-прежнему только в одном из плагинов, но установлены должны быть оба.

JohnDoe

2015-02-13 11:16

updater   bugnote:0013500

>не допускается одновременная работа
В этом и состоит баг.
Если тут есть какие-то ограничения sqlite, то фар обязан или обходить их сам, или сигнализировать об ошибке.

>работа по записи
Из кода должно быть видно, что достаточно SCTL_CREATE без SCTL_FREE

>Возможно, что не допускается одновременная работа по записи в базу от более, чем одного описателя с одинаковым гуидом.

Разумеется, проблема только в случае если гуид и соответственно база одни и те же.

DrKnS

2018-11-06 22:22

administrator   bugnote:0016296

5304

Issue History

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