libgit2 / libgit2/libgit2sharp
AccessViolationException accessing Commit.Parents concurrently on Linux .NET 10
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- C#
- Estrelas
- 3.5k
- Forks
- 925
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Descrição
Environment
- LibGit2Sharp 0.32.0
- LibGit2Sharp.NativeBinaries 2.0.324 (libgit2 1.8.6)
- .NET SDK/runtime 10.0.400
- Linux x64, GitHub-hosted Ubuntu 24.04 runner
Failure
A test process intermittently terminates with System.AccessViolationException while accessing Commit.Parents during a version-height calculation. The test uses distinct temporary repositories per test instance, and the LibGit2Context and its Repository are both live and strongly referenced throughout the failing call.
The latest occurrence is in this public GitHub Actions job:
https://github.com/dotnet/Nerdbank.GitVersioning/actions/runs/33464845055/job/99722455984
Relevant managed stack:
System.AccessViolationException: Attempted to read or write protected memory.
at Nerdbank.GitVersioning.LibGit2.LibGit2GitExtensions.<GetCommitHeight>g__TryCalculateHeight|19_0(LibGit2Sharp.Commit, <>c__DisplayClass19_0 ByRef)
at Nerdbank.GitVersioning.LibGit2.LibGit2GitExtensions.GetCommitHeight(LibGit2Sharp.Commit, GitWalkTracker, Func<Commit, Boolean>)
at Nerdbank.GitVersioning.LibGit2.LibGit2GitExtensions.GetVersionHeight(LibGit2Context, Version)
at Nerdbank.GitVersioning.LibGit2.LibGit2Context.CalculateVersionHeight(VersionOptions, VersionOptions)
at Nerdbank.GitVersioning.VersionOracle..ctor(GitContext, ICloudBuild, Nullable<Int32>)
at VersionOracleTests.CloudBuildNumber_4thPosition(...)
TryCalculateHeight is walking commit.Parents; this theory does not configure path filters, so it does not call Diff.Compare.
Investigation
We found and fixed separate repository-local lifetime defects where a lazy commit query escaped its context and a VersionOracle retained a disposed context. This crash persists after those fixes, and the present stack has no escaped lazy sequence or disposed native owner.
The test assembly's normal xUnit test-collection parallelism is the remaining variable. We are temporarily serializing test collections to prevent the intermittent native process crash, but would prefer a LibGit2Sharp/libgit2 fix or guidance about concurrent independent repository operations on Linux/.NET 10.
Related historical reports include #988 and #1513, but this report targets the current package versions and live-context Commit.Parents failure.
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece reproduzindo VersionOracleTests.CloudBuildNumber_4thPosition no job vinculado do Ubuntu 24.04 GitHub Actions e, em seguida, inspecione TryCalculateHeight, onde Commit.Parents é acessado de forma concorrente. Compare o comportamento com as coleções de testes serializadas temporariamente e determine se operações independentes de repositório são suportadas; considera-se concluído quando a causa estiver documentada e uma correção confirmada ou orientação para as versões atuais do pacote for fornecida.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- csharp, git
- Domínio
- devtools
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Ativa
- Clareza
- Precisa de esclarecimento
- Facilidade para iniciantes
- 38/100