JuliaPy / JuliaPy/PythonCall.jl

holding GIL on non-sticky tasks leads to undefined behavior

Offen
#809 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
bug
Vorherrschende Sprache
Julia
Sterne
1.1k
Forks
86
Ø Merge
1 T. 22 Std.
Gemergte PRs (30 T.)
3

Beschreibung

**Affects:** PythonCall

**Describe the bug**

Because the Python GIL is specific to an _OS thread_, but Julia tasks can migrate across threads when they're paused/resumed, locking the GIL from Julia on a non-sticky thread leads to undefined behavior (segfaults, deadlocks, etc.).

I think probably the way to handle this is to mark the current task as sticky in `GIL.@lock` and friends. It's really hard to get this right in libraries that wrap provide python functionality because even if callers know they need to lock the GIL, they may not know about task stickiness.

**Your system**

We've seen this across a wide variety of environments, Julia 1.10 to 1.12, macOS and ubuntu.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Start with GIL.@lock and related locking helpers, then inspect how Julia tasks can migrate between OS threads and how task stickiness is controlled. Reproduce the reported segfault or deadlock cases on the affected Julia versions, and add coverage showing that GIL-protected work does not run on a migratable task.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
julia, python
Bereich
operating-systems
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Aktiv
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
48/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.