diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2023-03-27 18:27:09 +0200 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2023-03-30 13:45:00 +0200 |
commit | b1eeb28905d38231f5eda70148de0ebf8eb1cd8a (patch) | |
tree | 1543e9bdb014c23817369d724cf5cd0a3073a055 | |
parent | ed9bfe29a1d54a6dca1fa85853457c56108a6183 (diff) | |
download | justbuild-b1eeb28905d38231f5eda70148de0ebf8eb1cd8a.tar.gz |
libgit2: Remove fix-fake-repo patch
-rw-r--r-- | etc/import/include/git2/TARGETS.git2 | 6 | ||||
-rw-r--r-- | etc/import/src/libgit2/TARGETS.git2 | 6 | ||||
-rw-r--r-- | etc/patches/libgit2_v1.5.0_fix-fake-repo.patch | 145 |
3 files changed, 0 insertions, 157 deletions
diff --git a/etc/import/include/git2/TARGETS.git2 b/etc/import/include/git2/TARGETS.git2 index 984fe0d8..f0ab360d 100644 --- a/etc/import/include/git2/TARGETS.git2 +++ b/etc/import/include/git2/TARGETS.git2 @@ -152,12 +152,6 @@ , "guard": ["INCLUDE_features_h__"] , "stage": ["sys"] } -, "sys/repository.h": - { "type": ["@", "rules", "patch", "file"] - , "src": [["FILE", null, "sys/repository.h"]] - , "patch": [["@", "patches", "", "libgit2_v1.5.0_fix-fake-repo.patch"]] - , "patch-part": ["a", "include", "git2", "sys", "repository.h"] - } , "TREE": { "type": "tree" , "name": "git2" diff --git a/etc/import/src/libgit2/TARGETS.git2 b/etc/import/src/libgit2/TARGETS.git2 index aca7d2ea..67d4b772 100644 --- a/etc/import/src/libgit2/TARGETS.git2 +++ b/etc/import/src/libgit2/TARGETS.git2 @@ -115,12 +115,6 @@ , ["src/util", "util_private_headers"] ] } -, "repository.c": - { "type": ["@", "rules", "patch", "file"] - , "src": [["FILE", null, "repository.c"]] - , "patch": [["@", "patches", "", "libgit2_v1.5.0_fix-fake-repo.patch"]] - , "patch-part": ["a", "src", "libgit2", "repository.c"] - } , "libgit2_sources": { "type": ["@", "rules", "data", "staged"] , "srcs": diff --git a/etc/patches/libgit2_v1.5.0_fix-fake-repo.patch b/etc/patches/libgit2_v1.5.0_fix-fake-repo.patch deleted file mode 100644 index 0da7c1bd..00000000 --- a/etc/patches/libgit2_v1.5.0_fix-fake-repo.patch +++ /dev/null @@ -1,145 +0,0 @@ -From 19711a9a2a557f24df34ad16046f3daffaeab0e8 Mon Sep 17 00:00:00 2001 -From: Oliver Reiche <oliver.reiche@huawei.com> -Date: Wed, 3 Aug 2022 16:27:58 +0200 -Subject: [PATCH] Do not register fake repository as owner of ODB - -Accessing ODB is guaranteed to be thread-safe. Registering a -fake repository (created via git_repository_wrap_odb()) may -not register itself as owner of the ODB in order to maintain -that guarantee. Otherwise, accessing objects from ODB will -try to obtain the cache from the owning repository (via -odb_cache()) and produce a race if this ODB is concurrently -used to create fake repositories in other threads. -Consequently, operations on fake repositories will interact -with the ODB's cache instead of the repository's cache. ---- - include/git2/sys/repository.h | 3 ++- - src/libgit2/repository.c | 16 +++++++++------- - tests/libgit2/odb/backend/nobackend.c | 2 +- - tests/libgit2/repo/setters.c | 23 ++++++++++++++++++++++- - 4 files changed, 34 insertions(+), 10 deletions(-) - -diff --git a/include/git2/sys/repository.h b/include/git2/sys/repository.h -index 892be669266..33bc5051f31 100644 ---- a/include/git2/sys/repository.h -+++ b/include/git2/sys/repository.h -@@ -97,9 +97,10 @@ GIT_EXTERN(int) git_repository_set_config(git_repository *repo, git_config *conf - * - * @param repo A repository object - * @param odb An ODB object -+ * @param set_owner Register repository as owner of ODB - * @return 0 on success, or an error code - */ --GIT_EXTERN(int) git_repository_set_odb(git_repository *repo, git_odb *odb); -+GIT_EXTERN(int) git_repository_set_odb(git_repository *repo, git_odb *odb, bool set_owner); - - /** - * Set the Reference Database Backend for this repository -diff --git a/src/libgit2/repository.c b/src/libgit2/repository.c -index df41f581c22..c31e5509edb 100644 ---- a/src/libgit2/repository.c -+++ b/src/libgit2/repository.c -@@ -89,10 +89,12 @@ git_str git_repository__reserved_names_posix[] = { - }; - size_t git_repository__reserved_names_posix_len = 1; - --static void set_odb(git_repository *repo, git_odb *odb) -+static void set_odb(git_repository *repo, git_odb *odb, bool set_owner) - { - if (odb) { -- GIT_REFCOUNT_OWN(odb, repo); -+ if (set_owner) { -+ GIT_REFCOUNT_OWN(odb, repo); -+ } - GIT_REFCOUNT_INC(odb); - } - -@@ -153,7 +155,7 @@ int git_repository__cleanup(git_repository *repo) - - set_config(repo, NULL); - set_index(repo, NULL); -- set_odb(repo, NULL); -+ set_odb(repo, NULL, /*set_owner=*/true); - set_refdb(repo, NULL); - - return 0; -@@ -880,7 +882,7 @@ static int _git_repository_open_ext_from_env( - goto error; - - if (odb) -- git_repository_set_odb(repo, odb); -+ git_repository_set_odb(repo, odb, /*set_owner=*/true); - - error = git__getenv(&alts_buf, "GIT_ALTERNATE_OBJECT_DIRECTORIES"); - if (error == GIT_ENOTFOUND) { -@@ -1098,7 +1100,7 @@ int git_repository_wrap_odb(git_repository **repo_out, git_odb *odb) - repo = repository_alloc(); - GIT_ERROR_CHECK_ALLOC(repo); - -- git_repository_set_odb(repo, odb); -+ git_repository_set_odb(repo, odb, /*set_owner=*/false); - *repo_out = repo; - - return 0; -@@ -1305,12 +1307,12 @@ int git_repository_odb(git_odb **out, git_repository *repo) - return 0; - } - --int git_repository_set_odb(git_repository *repo, git_odb *odb) -+int git_repository_set_odb(git_repository *repo, git_odb *odb, bool set_owner) - { - GIT_ASSERT_ARG(repo); - GIT_ASSERT_ARG(odb); - -- set_odb(repo, odb); -+ set_odb(repo, odb, set_owner); - return 0; - } - -diff --git a/tests/libgit2/odb/backend/nobackend.c b/tests/libgit2/odb/backend/nobackend.c -index 7d9394c6f33..4ba563223c4 100644 ---- a/tests/libgit2/odb/backend/nobackend.c -+++ b/tests/libgit2/odb/backend/nobackend.c -@@ -17,7 +17,7 @@ void test_odb_backend_nobackend__initialize(void) - cl_git_pass(git_refdb_new(&refdb, _repo)); - - git_repository_set_config(_repo, config); -- git_repository_set_odb(_repo, odb); -+ git_repository_set_odb(_repo, odb, /*set_owner=*/true); - git_repository_set_refdb(_repo, refdb); - - /* The set increases the refcount and we don't want them anymore */ -diff --git a/tests/libgit2/repo/setters.c b/tests/libgit2/repo/setters.c -index 66ec7706c2b..099a6fb3b3e 100644 ---- a/tests/libgit2/repo/setters.c -+++ b/tests/libgit2/repo/setters.c -@@ -94,7 +94,28 @@ void test_repo_setters__setting_a_new_odb_on_a_repo_which_already_loaded_one_pro - cl_git_pass(git_odb__open(&new_odb, "./testrepo.git/objects", NULL)); - cl_assert(((git_refcount *)new_odb)->refcount.val == 1); - -- git_repository_set_odb(repo, new_odb); -+ git_repository_set_odb(repo, new_odb, /*set_owner=*/true); -+ cl_assert(((git_refcount *)new_odb)->refcount.val == 2); -+ -+ git_repository_free(repo); -+ cl_assert(((git_refcount *)new_odb)->refcount.val == 1); -+ -+ git_odb_free(new_odb); -+ -+ /* -+ * Ensure the cleanup method won't try to free the repo as it's already been taken care of -+ */ -+ repo = NULL; -+} -+ -+void test_repo_setters__setting_a_new_odb_on_a_non_owner_repo_which_already_loaded_one_properly_honors_the_refcount(void) -+{ -+ git_odb *new_odb; -+ -+ cl_git_pass(git_odb__open(&new_odb, "./testrepo.git/objects", NULL)); -+ cl_assert(((git_refcount *)new_odb)->refcount.val == 1); -+ -+ git_repository_set_odb(repo, new_odb, /*set_owner=*/false); - cl_assert(((git_refcount *)new_odb)->refcount.val == 2); - - git_repository_free(repo);
\ No newline at end of file |