Libqgit2 clone error unable to lock mwindow mutex

首先说明一下这个error已经困扰了我两个多月了,求助了不少人,也找了N多资料都没能找到答案,关键是google都没能发现任何相关资料,简直崩溃。
不过今天终于才勉强解决了,但是感觉我的处理方式应该有问题,不过毕竟能用暂时就不纠结这么多了,下面具体说下我的解决方案,挺有意思的

找到解决方案过程

在找到解决方案前,尝试了无数次的重新编译,换版本编译,得到的结果仍然是同样的蛋疼。
并且,我发现仅仅是clone会出现这个错误,init并不会发生崩溃,当时我就在想会不会不是libqgit2的问题呢,因为使用ctest -V测试是clone是可以成功的。
由此推断出,应该是QT Creator的问题(还有一个件事也能佐证我这个猜测,就是期间我使用了一个qtpm的包管理工具去安装libqgit2是可以正常clone的,但是这个东西不能导入QT Creator而写项目关注的人也不多,遂放弃),但是到底是什么问题我并不清楚,我也不是很懂QT和编译相关的东西。
为此我还在stackoverflow上提交了我这个问题,但是并没人鸟我,囧…
到最后,是在没办法,就使用这个错误中的关键词在项目源代码中所有,但是一无所得,后来我想到是不是不是libqgit2的问题是libgit2的问题呢,我一搜索,瞬间懵逼了,这个错误能再libgit2的源码中找到,瞬间燃气了星星之火,感觉有希望了,遂去翻阅libgit2的文档,然而可想而知我又懵逼了,并没有找到相关的文档
好吧心想硬着头皮去看源代码吧,这一看又看到希望了,里面的注释有说到这些方法使用来锁定window用的,但我根本就没有用到它的window啊,我有我自己的图形库,并不需要它去锁定什么window。
我这样一想,能不能把这些东西删除掉的内部实现注释掉呢,想想反正死马当活马医了,本以为会是一堆报错来打我脸,没想到居然行了,行了,了,天不亡我

修改如下

1
2
3
4
5
6
7
8
vim libgit2/src/mwindow.c

// 注释到所有 git__mwindow_mutex 相关的判断
// 会有几处,我这里全部注释掉了
// if (git_mutex_lock(&git__mwindow_mutex)) {
// giterr_set(GITERR_THREAD, "unable to lock mwindow mutex");
// return;
// }

总结

  1. 一直以为是libqgit2或者是QT Creator的问题,但是…
  2. 不要过分相信权威(libqgit2已经没人维护了,让我一直以为是它出了问题)