Skip to content

Release 0.0.8: fix interrupted native library loading - #9

Merged
pomponchik merged 3 commits into
mainfrom
codex/release-0.0.8
Nov 3, 2026
Merged

pomponchik merged 3 commits into
mainfrom
codex/release-0.0.8

Conversation

@pomponchik

@pomponchik pomponchik commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

A SIGINT during the first native load could abandon an OS library reference after dlopen succeeded but before ctypes adopted the handle. Defer Python SIGINT delivery until adoption and cache publication or rollback completes, then restore and invoke the caller's signal policy. Concurrent and reentrant cache misses release redundant references without locking around loader hooks.

Bump the shared library version to 0.0.8, including Cargo metadata and README dependency pins.

Validation:

  • 34 new regression cases, including real C constructor/destructor observations, original signal policies, concurrent/reentrant loading and GC-disabled frame lifetime checks.
  • Reproduced the leak before the fix; all 20 directed mutants were detected, covering all 34 new cases.
  • Full local suite: 2774 passed, 9 skipped; statement and branch coverage 100%.
  • Loader checks on Python 3.8, 3.11, 3.14 without the GIL and 3.15; Ruff and strict source/test mypy passed.
  • Version and release tooling: 148 tests passed.
  • Signal fixtures use matching Windows path normalization and committed cancellation acknowledgements; six nanosecond controls cover legitimate second-child NoWork. All 132 related cases passed on Python 3.8, 3.11 and 3.14 without the GIL; ten additional directed mutants were detected.

@pomponchik
pomponchik merged commit b4d2975 into main Nov 3, 2026
50 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant