Commit 1adb84107f406a00178296257289663860d277ae

Edward Thomson 2020-12-05T22:47:24

Merge pull request #5719 from libgit2/ethomson/nothreads Thread-free implementation

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)
 {