View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001813 | Far Manager | _Common | public | 2011-06-25 20:32 | 2013-03-12 22:08 |
Reporter | Maximus | Assigned To | alexy | ||
Priority | normal | Severity | minor | Reproducibility | sometimes |
Status | closed | Resolution | fixed | ||
Product Version | 3.0 | ||||
Fixed in Version | 3.0 | ||||
Summary | 0001813: Проблемы с БД при одновременном старте/закрытии нескольких копий фар | ||||
Description | Нечасто, но случается. Отладчик показал, что не все функции sqlite переживают NULL в качестве аргумента. sqlite3_clear_bindings - падает. вызов был вроде из "delete FolderShortcuts;" | ||||
Tags | No tags attached. | ||||
Build | 3232 | ||||
|
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; } |
|
не надо так чинить, там null не должен быть вообще, надо понять почему там null |
|
а pStmt когда должен инициализироваться? не здесь "if (stmtFindKey.Bind(Root).Bind(Name).Step())"? |
|
InitStmt |
|
Странно, после выполнения 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, ..." вроде оказался успешным (закрыл отладчик, не уверен). |
|
Разбор полетов показал, что фар падает, если одновременно (ну, почти) закрываются несколько фаров. > 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 */ |
|
Проблема с БД проявляется и при одновременном открытии нескольких копий FAR. Чаще всего появляется окно ╔════════════ Проблемы с БД настроек ═════════════╗ ║ plugincache.db ║ ║ history.db ║ ╟─────────────────────────────────────────────────╢ ║ { Показать каталоги настроек } [ Игнорировать ] ║ ╚═════════════════════════════════════════════════╝ с разным перечнем файлов БД. Ссылка на тему в форуме: http://forum.farmanager.com/viewtopic.php?f=9&t=7349 |
|
3232 |
|
мьютекс один на все базы с одним именем, даже если полный путь у них разный ? |
|
Можно и переделать, но нужно ли реально? Пока что важней увидеть что это решает проблему. |
|
рука тянется написать программку из 3 строк, которая заблокирует запуск фар3 напрочь. |
|
и, кто тебе мешает? |
|
Потестил - нормально, пока проблемы нет. |
|
2useven10, дык дофикси что начал alexy. |
|
3234 - имя мьютекса зависит от полного пути. |
|
> + for (size_t i=0; i < plen; ++i) > + hs = hs*17 + path.At(i); А это типа хеш? |
|
типа да. |
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 |