mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-22 06:14:14 +02:00
2bedfaa394
Every QElectroTech on a computer shares elements_cache.sqlite. The cache set PRAGMA locking_mode = EXCLUSIVE, so a QElectroTech that had read the file once kept it locked until it closed. A second one -- a build in another folder, or a build beside a released version, which SingleApplication lets run because its key includes the program's path and version -- could not write to it: each write waited SQLite's 5 s busy timeout and failed, on the GUI thread, twice for every symbol the collection showed. The report's log is exactly that: an empty QSqlError every 5.0 s for three minutes. Use SQLite's normal locking, which holds a lock only while a statement runs, and give this connection no busy timeout: the cache only saves time, so a busy file is a cache miss, never a wait. Print the failing query's error, not the connection's, which was always empty. Measured with the real program running and a second process writing to its cache: before, the write fails "database is locked" after 5.01 s; after, it succeeds in 0.02 s. tst_elementcachelock opens two caches on one file; it fails before the fix with the report's empty QSqlError. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>