JuliaPy / JuliaPy/PythonCall.jl

holding GIL on non-sticky tasks leads to undefined behavior

Aberta
#809 2 comentários 0 reações 0 responsáveis Ver no GitHub
bug
Linguagem predominante
Julia
Estrelas
1.1k
Forks
86
Merge médio
1d 22h
PRs com merge (30d)
3

Descrição

**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.

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Direção de pesquisa

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.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
julia, python
Domínio
operating-systems
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Ativa
Clareza
Razoavelmente clara
Facilidade para iniciantes
48/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.