View Issue Details

IDProjectCategoryView StatusLast Update
0001813Far Manager_Commonpublic2013-03-12 22:08
ReporterMaximus Assigned Toalexy  
PrioritynormalSeverityminorReproducibilitysometimes
Status closedResolutionfixed 
Product Version3.0 
Fixed in Version3.0 
Summary0001813: Проблемы с БД при одновременном старте/закрытии нескольких копий фар
DescriptionНечасто, но случается. Отладчик показал, что не все функции sqlite переживают NULL в качестве аргумента.
sqlite3_clear_bindings - падает.

вызов был вроде из "delete FolderShortcuts;"
TagsNo tags attached.
Build3232

Activities

Maximus

2011-06-25 20:32

reporter  

configdb110625.diff (514 bytes)   
Index: configdb.cpp
===================================================================
--- configdb.cpp	(revision 6357)
+++ configdb.cpp	(working copy)
@@ -142,7 +142,7 @@
 
 	~SQLiteStmt() { sqlite3_finalize(pStmt); }
 
-	SQLiteStmt& Reset() { param=1; sqlite3_clear_bindings(pStmt); sqlite3_reset(pStmt); return *this; }
+	SQLiteStmt& Reset() { param=1; if (pStmt) sqlite3_clear_bindings(pStmt); sqlite3_reset(pStmt); return *this; }
 
 	bool Step() { return sqlite3_step(pStmt) == SQLITE_ROW; }
 
configdb110625.diff (514 bytes)   

alexy

2011-06-25 22:42

administrator   bugnote:0007214

не надо так чинить, там null не должен быть вообще, надо понять почему там null

Maximus

2011-06-25 22:51

reporter   bugnote:0007215

а pStmt когда должен инициализироваться?
не здесь "if (stmtFindKey.Bind(Root).Bind(Name).Step())"?

alexy

2011-06-26 05:23

administrator   bugnote:0007216

InitStmt

Maximus

2011-07-07 23:50

reporter   bugnote:0007262

Странно, после выполнения
db.InitStmt(stmtFindKey, L"SELECT id FROM table_keys WHERE parent_id=?1 AND name=?2 AND id<>0;");
stmtFindKey.pStmt оказался равен nullptr
Это при закрытии фара "крестиком"

Повторный вызов в отладчике "db.InitStmt(stmtFindKey, ..." вроде оказался успешным (закрыл отладчик, не уверен).

Maximus

2011-07-20 21:49

reporter   bugnote:0007288

Разбор полетов показал, что фар падает, если одновременно (ну, почти) закрываются несколько фаров.

> Far.exe!SQLiteDb::InitStmt(SQLiteStmt & stmtStmt, const wchar_t * Stmt) Line 234 + 0x33 bytes C++
     Far.exe!HierarchicalConfigDb::HierarchicalConfigDb(const wchar_t * DbName) Line 563 + 0x17 bytes C++
     Far.exe!CreateShortcutsConfig() Line 2124 + 0x29 bytes C++
     Far.exe!Shortcuts::~Shortcuts() Line 118 + 0x5 bytes C++
     Far.exe!Shortcuts::`scalar deleting destructor'() + 0x2b bytes C++
     Far.exe!ControlObject::~ControlObject() Line 164 + 0x31 bytes C++
     Far.exe!MainProcess(const wchar_t * lpwszEditName, const wchar_t * lpwszViewName, const wchar_t * lpwszDestName1, const wchar_t * lpwszDestName2, int StartLine, int StartChar) Line 291 + 0xb bytes C++

sqlite3_prepare16_v2 возвращает SQLITE_BUSY /* The database file is locked */

Aidar

2013-03-04 20:44

reporter   bugnote:0010442

Проблема с БД проявляется и при одновременном открытии нескольких копий FAR.
Чаще всего появляется окно
╔════════════ Проблемы с БД настроек ═════════════╗
║ plugincache.db ║
║ history.db ║
╟─────────────────────────────────────────────────╢
║ { Показать каталоги настроек } [ Игнорировать ] ║
╚═════════════════════════════════════════════════╝
с разным перечнем файлов БД.

Ссылка на тему в форуме:
http://forum.farmanager.com/viewtopic.php?f=9&t=7349

alexy

2013-03-05 13:19

administrator   bugnote:0010450

3232

2useven10

2013-03-05 13:54

developer   bugnote:0010452

мьютекс один на все базы с одним именем, даже если полный путь у них разный ?

alexy

2013-03-05 14:01

administrator   bugnote:0010455

Можно и переделать, но нужно ли реально?
Пока что важней увидеть что это решает проблему.

2useven10

2013-03-06 16:19

developer   bugnote:0010474

рука тянется написать программку из 3 строк, которая заблокирует запуск фар3 напрочь.

alexy

2013-03-06 16:27

administrator   bugnote:0010475

и, кто тебе мешает?

Aidar

2013-03-06 16:36

reporter   bugnote:0010476

Потестил - нормально, пока проблемы нет.

Denis

2013-03-06 18:15

reporter   bugnote:0010477

2useven10, дык дофикси что начал alexy.

2useven10

2013-03-06 20:45

developer   bugnote:0010480

3234 - имя мьютекса зависит от полного пути.

DrKnS

2013-03-06 23:20

administrator   bugnote:0010481

> + for (size_t i=0; i < plen; ++i)
> + hs = hs*17 + path.At(i);


А это типа хеш?

2useven10

2013-03-07 04:48

developer   bugnote:0010482

типа да.

Issue History

Date Modified Username Field Change
2011-06-25 20:32 Maximus New Issue
2011-06-25 20:32 Maximus File Added: configdb110625.diff
2011-06-25 22:42 alexy Note Added: 0007214
2011-06-25 22:51 Maximus Note Added: 0007215
2011-06-26 05:23 alexy Note Added: 0007216
2011-07-07 23:50 Maximus Note Added: 0007262
2011-07-20 21:49 Maximus Note Added: 0007288
2013-03-04 20:44 Aidar Note Added: 0010442
2013-03-04 20:54 2useven10 Summary Far падает при выходе => Проблемы с БД при одновременном старте/закрытии нескольких копий фар
2013-03-05 13:19 alexy Note Added: 0010450
2013-03-05 13:19 alexy Assigned To => alexy
2013-03-05 13:19 alexy Status new => feedback
2013-03-05 13:54 2useven10 Note Added: 0010452
2013-03-05 14:01 alexy Note Added: 0010455
2013-03-06 16:19 2useven10 Note Added: 0010474
2013-03-06 16:27 alexy Note Added: 0010475
2013-03-06 16:36 Aidar Note Added: 0010476
2013-03-06 18:15 Denis Note Added: 0010477
2013-03-06 20:45 2useven10 Note Added: 0010480
2013-03-06 23:20 DrKnS Note Added: 0010481
2013-03-07 04:48 2useven10 Note Added: 0010482
2013-03-12 22:08 alexy Build => 3232
2013-03-12 22:08 alexy Status feedback => closed
2013-03-12 22:08 alexy Resolution open => fixed
2013-03-12 22:08 alexy Fixed in Version => 3.0