Merge pull request #5719 from libgit2/ethomson/nothreads Thread-free implementation
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index 11b184e..8e35726 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -51,6 +51,14 @@ jobs:
CMAKE_OPTIONS: -DUSE_HTTPS=mbedTLS -DUSE_SHA1=HTTPS -DREGEX_BACKEND=pcre -DDEPRECATE_HARD=ON -DUSE_LEAK_CHECKER=valgrind -DUSE_GSSAPI=ON
CMAKE_GENERATOR: Ninja
os: ubuntu-latest
+ - # Xenial, GCC, thread-free
+ container:
+ name: xenial
+ env:
+ CC: gcc
+ CMAKE_OPTIONS: -DTHREADSAFE=OFF -DDEPRECATE_HARD=ON -DUSE_LEAK_CHECKER=valgrind -DUSE_GSSAPI=ON
+ CMAKE_GENERATOR: Ninja
+ os: ubuntu-latest
- # Focal, Clang 10, mbedTLS, MemorySanitizer
container:
name: focal
diff --git a/src/pack-objects.c b/src/pack-objects.c
index 8ebb8cf..03d05b7 100644
--- a/src/pack-objects.c
+++ b/src/pack-objects.c
@@ -50,7 +50,7 @@ struct walk_object {
#ifdef GIT_THREADS
# define GIT_PACKBUILDER__MUTEX_OP(pb, mtx, op) git_mutex_##op(&(pb)->mtx)
#else
-# define GIT_PACKBUILDER__MUTEX_OP(pb, mtx, op) GIT_UNUSED(pb)
+# define GIT_PACKBUILDER__MUTEX_OP(pb, mtx, op) git__noop()
#endif
#define git_packbuilder__cache_lock(pb) GIT_PACKBUILDER__MUTEX_OP(pb, cache_mutex, lock)
diff --git a/src/runtime.c b/src/runtime.c
index f8e3e3b..a214b43 100644
--- a/src/runtime.c
+++ b/src/runtime.c
@@ -103,8 +103,8 @@ GIT_INLINE(int) init_unlock(void)
# error unknown threading model
#else
-# define init_lock() git___noop()
-# define init_unlock() git___noop()
+# define init_lock() git__noop()
+# define init_unlock() git__noop()
#endif
diff --git a/src/thread-utils.h b/src/thread-utils.h
index e577a9b..d71fabe 100644
--- a/src/thread-utils.h
+++ b/src/thread-utils.h
@@ -235,38 +235,36 @@ GIT_INLINE(int64_t) git_atomic64_get(git_atomic64 *a)
#else
-GIT_INLINE(int) git___noop(void) { return 0; }
-
-#define git_threads_global_init git___noop
+#define git_threads_global_init git__noop
#define git_thread unsigned int
-#define git_thread_create(thread, start_routine, arg) git___noop()
-#define git_thread_join(id, status) git___noop()
+#define git_thread_create(thread, start_routine, arg) git__noop()
+#define git_thread_join(id, status) git__noop()
/* Pthreads Mutex */
#define git_mutex unsigned int
-#define git_mutex_init(a) git___noop()
-#define git_mutex_init(a) git___noop()
-#define git_mutex_lock(a) git___noop()
-#define git_mutex_unlock(a) git___noop()
-#define git_mutex_free(a) git___noop()
+#define git_mutex_init(a) git__noop()
+#define git_mutex_init(a) git__noop()
+#define git_mutex_lock(a) git__noop()
+#define git_mutex_unlock(a) git__noop()
+#define git_mutex_free(a) git__noop()
/* Pthreads condition vars */
#define git_cond unsigned int
-#define git_cond_init(c) git___noop()
-#define git_cond_free(c) git___noop()
-#define git_cond_wait(c, l) git___noop()
-#define git_cond_signal(c) git___noop()
-#define git_cond_broadcast(c) git___noop()
+#define git_cond_init(c) git__noop()
+#define git_cond_free(c) git__noop()
+#define git_cond_wait(c, l) git__noop()
+#define git_cond_signal(c) git__noop()
+#define git_cond_broadcast(c) git__noop()
/* Pthreads rwlock */
#define git_rwlock unsigned int
-#define git_rwlock_init(a) git___noop()
-#define git_rwlock_rdlock(a) git___noop()
-#define git_rwlock_rdunlock(a) git___noop()
-#define git_rwlock_wrlock(a) git___noop()
-#define git_rwlock_wrunlock(a) git___noop()
-#define git_rwlock_free(a) git___noop()
+#define git_rwlock_init(a) git__noop()
+#define git_rwlock_rdlock(a) git__noop()
+#define git_rwlock_rdunlock(a) git__noop()
+#define git_rwlock_wrlock(a) git__noop()
+#define git_rwlock_wrunlock(a) git__noop()
+#define git_rwlock_free(a) git__noop()
#define GIT_RWLOCK_STATIC_INIT 0
diff --git a/src/util.h b/src/util.h
index f49989f..185a1b1 100644
--- a/src/util.h
+++ b/src/util.h
@@ -414,6 +414,8 @@ GIT_INLINE(double) git__timer(void)
extern int git__getenv(git_buf *out, const char *name);
+GIT_INLINE(int) git__noop(void) { return 0; }
+
#include "alloc.h"
#endif
diff --git a/tests/pack/threadsafety.c b/tests/pack/threadsafety.c
index 0b47978..fd6a61f 100644
--- a/tests/pack/threadsafety.c
+++ b/tests/pack/threadsafety.c
@@ -20,6 +20,7 @@ void test_pack_threadsafety__cleanup(void)
cl_git_pass(git_libgit2_opts(GIT_OPT_SET_MWINDOW_FILE_LIMIT, original_mwindow_file_limit));
}
+#ifdef GIT_THREADS
static void *get_status(void *arg)
{
const char *repo_path = (const char *)arg;
@@ -33,6 +34,7 @@ static void *get_status(void *arg)
return NULL;
}
+#endif
void test_pack_threadsafety__open_repo_in_multiple_threads(void)
{