• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

GavinHuttley / scinexus / 35062048326
100%

Build:
DEFAULT BRANCH: main
Ran 16 Sep 2026 06:04AM UTC
Jobs 9
Files 15
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

16 Sep 2026 06:03AM UTC coverage: 99.792% (+0.007%) from 99.785%
35062048326

push

github

GavinHuttley
API: a writable sqlite store claims its lock as it opens

The db property claimed the lock on first access, and a read is an access,
so the first worker thread to read a writable store became its owner.
Ownership is thread scoped, as a000bd41154f records: it changes who may
release a lock, not who may take one. The master could then neither write
nor release it, close() left it on disk, and the next session was refused by
a thread id that no longer exists -- with nothing said at the moment it
happened.

A writable store now opens its connection and claims its lock while it is
being constructed, on the constructing thread, which by the model is the
master. By the time a worker reads, the lock is already held and nothing in
the read path reaches for it. That alone would still leave a store whose
lock had been released by hand open to the next worker that read it, so the
implicit claim in db is also confined to the session that opened the store,
and the calls that change what the store holds are refused from any other.
Reads are not: that is what the worker threads are for. close() now warns
when the lock it holds is not this session's to release, so the one path
that still strands one -- a store constructed inside a worker thread, where
is_master_process() is false -- says so rather than going quietly.

A lock the constructor cannot take is passed over in silence, because
opening a store for writing is not writing to it: the same call serves a
caller who means to read, and one who means to clear a lock left behind.
The write that meets the lock raises, as it did before. Claiming is gated on
is_master_process(), as DataStoreDirectory gates creating its directories,
so a store rebuilt in a worker process is unchanged. Two things now happen
earlier: the file and schema exist as soon as a writable store is
constructed, and a store built and abandoned without close() warns, because
it holds a lock from the moment it exists.

24 of 24 new or added lines in 1 file covered. (100.0%)

2880 of 2886 relevant lines covered (99.79%)

8.85 hits per line

Jobs
ID Job ID Ran Files Coverage
1 run-3.11-ubuntu-latest - 35062048326.1 16 Sep 2026 06:05AM UTC 15
99.79
GitHub Action Run
2 run-3.14-ubuntu-latest - 35062048326.2 16 Sep 2026 06:05AM UTC 15
99.79
GitHub Action Run
3 run-3.14-macos-latest - 35062048326.3 16 Sep 2026 06:04AM UTC 15
98.26
GitHub Action Run
4 run-3.14-windows-latest - 35062048326.4 16 Sep 2026 06:05AM UTC 15
98.22
GitHub Action Run
5 run-3.14t-macos-latest - 35062048326.5 16 Sep 2026 06:05AM UTC 15
98.26
GitHub Action Run
6 run-3.11-macos-latest - 35062048326.6 16 Sep 2026 06:05AM UTC 15
98.27
GitHub Action Run
7 run-3.14t-ubuntu-latest - 35062048326.7 16 Sep 2026 06:05AM UTC 15
99.79
GitHub Action Run
8 run-3.11-windows-latest - 35062048326.8 16 Sep 2026 06:06AM UTC 15
98.23
GitHub Action Run
9 run-3.14t-windows-latest - 35062048326.9 16 Sep 2026 06:08AM UTC 15
98.22
GitHub Action Run
Source Files on build 35062048326
  • Tree
  • List 15
  • Changed 2
  • Source Changed 2
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #35062048326
  • c25bdcf0 on github
  • Prev Build on main (#34951839115)
  • Next Build on main (#35063010260)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc