libgit2 / libgit2/libgit2sharp

AccessViolationException accessing Commit.Parents concurrently on Linux .NET 10

Open
#2,192 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C#
Stars
3.5k
Forks
925
PR merge metrics
No merged PRs in 30d

Description

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.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing VersionOracleTests.CloudBuildNumber_4thPosition on the linked Ubuntu 24.04 GitHub Actions job, then inspect TryCalculateHeight where Commit.Parents is accessed concurrently. Compare behavior with the temporary serialized test collections and determine whether independent repository operations are supported; done means documenting the cause and providing a confirmed fix or guidance for the current package versions.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp, git
Domain
devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.