JuliaPy / JuliaPy/PythonCall.jl
holding GIL on non-sticky tasks leads to undefined behavior
- 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