Repository navigation
Conversation
|
Most changes to Python require a NEWS entry. Add one using the blurb_it web app or the blurb command-line tool. If this change has little impact on Python users, wait for a maintainer to apply the |
|
CI for PR #160706 fails on all three macOS jobs in the new The new CI run will tell us whether that addresses the macOS failure. I could not build CPython locally here because the Windows C toolchain is unavailable. |
|
@erlend-aasland The latest CI run for 76eb2d3 failed on macOS Intel with a hosted-runner communication error; GitHub’s annotation reports that the runner lost communication with the server, and the detailed job log is unavailable. Could you rerun that job when convenient? The other macOS jobs passed. |
Summary
Concurrent calls to
execute()on a shared SQLite connection can obtain the same cachedsqlite3_stmtbefore SQLite marks it busy. The cursor releases the GIL around SQLite operations, leaving a race where concurrent cursors can reset or use the same statement and crash the process.Reserve cached statements before releasing the GIL. If a cached statement is already reserved, create an uncached statement for the concurrent execution. Release the reservation when the statement is reset.
Add a regression test that runs concurrent parameterized queries on a shared connection and verifies the returned BLOB contents.
Fixes gh-160699.
Verification
PCbuild/amd64/python_d.exe -m unittest test.test_sqlite3.test_dbapi: 211 passed, 2 skipped.Tools/patchcheck/patchcheck.py: passed; NEWS fragment recognized.