libgit2 / libgit2/libgit2sharp

throw LibGit2SharpException or repo.Head.TIp==null while parallel

未关闭
#708 4 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

主要语言
C#
星标
3.5k
派生
925
PR 合并指标
30 天内没有已合并 PR

描述

Updated. Code simplified

// use LibGit2Sharp.0.16.0.0 from nuget
// https://github.com/torvalds/linux
var gitpath = @"path/to/linux/source";

var times = 10;
for (int i = 0; i < times; i++)
{
    Task.Run(() =>
    {
        using (var repo = new Repository(gitpath))
        {
            // sometimes throw LibGit2SharpException here
            // An exception of type 'LibGit2Sharp.LibGit2SharpException' occurred in LibGit2Sharp.dll but was not handled in user code
            // Additional information: An error was raised by libgit2. Category = Os (Error).
            // Failed to mmap. No data written: Not enough storage is available to process this command.
            foreach (var commit in repo.Commits)
            {
            }
        }
    });
}

while (true)
{
    using (var repo = new Repository(gitpath))
    {
        // sometimes repo.Head.Tip == null
        repo.Head.Tip.ToString();
    }
}

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

先使用 Repository(gitpath)、repo.Commits 和 repo.Head.Tip 进行并行复现,然后使用 LibGit2Sharp 0.16.0.0 在 Linux repository 上运行。调查并发构造或访问 repository 是否会导致 mmap 失败和 null tip;当报告的并行操作不再产生这两种现象中的任何一种时,即视为完成;如果项目有合适的测试位置,则添加 regression test。

由索引模型根据 Issue 内容生成。

评估

技术栈
csharp, git
领域
devtools
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
需要澄清
新手友好度
25/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。