PageIndex/pageindex/index
mountain d3ea9b9f2e fix: scoped concurrency semaphore over-release on cancellation
The sync-concurrency fix marked the scoped-override semaphore for release
before it was actually acquired, so a coroutine cancelled while polling for
a scoped permit (or a sync acquire interrupted mid-wait) ran the finally and
released a permit it never held — inflating the scoped cap for later calls
(the mirror of the ceiling-leak fix). Only bind the release guard after the
acquire succeeds, in both the async and sync semaphores. Regression test
included: cancelling a waiter leaves the scoped permit count at 1, not 2.
2026-07-09 23:08:39 +08:00
..
__init__.py feat: add PageIndex SDK with local/cloud dual-mode support (#207) 2026-04-08 20:21:58 +08:00
page_index.py fix: prompt-injection delimiter escape, legacy config coercion, gather resilience, true cross-thread concurrency bound 2026-07-09 11:15:58 +08:00
page_index_md.py fix: prompt-injection delimiter escape, legacy config coercion, gather resilience, true cross-thread concurrency bound 2026-07-09 11:15:58 +08:00
pipeline.py fix: CMYK image drop, empty-doc crash, page_index shadowing, sqlite hardening, flaky tests 2026-07-09 11:58:59 +08:00
utils.py fix: scoped concurrency semaphore over-release on cancellation 2026-07-09 23:08:39 +08:00