]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Extract threading code into a new library.
authorNick Mathewson <nickm@torproject.org>
Thu, 28 Jun 2018 13:14:42 +0000 (09:14 -0400)
committerNick Mathewson <nickm@torproject.org>
Thu, 28 Jun 2018 13:14:42 +0000 (09:14 -0400)
Note that the workqueue code does *not* go here: it is logically at
a higher level, since it needs to use libevent and the networking
stack.

15 files changed:
.gitignore
Makefile.am
src/common/compat.h
src/common/include.am
src/common/workqueue.c
src/include.am
src/lib/thread/.may_include [new file with mode: 0644]
src/lib/thread/compat_pthreads.c [moved from src/common/compat_pthreads.c with 98% similarity]
src/lib/thread/compat_threads.c [moved from src/common/compat_threads.c with 96% similarity]
src/lib/thread/compat_winthreads.c [moved from src/common/compat_winthreads.c with 98% similarity]
src/lib/thread/include.am [new file with mode: 0644]
src/lib/thread/threads.h [moved from src/common/compat_threads.h with 99% similarity]
src/rust/build.rs
src/test/test_threads.c
src/test/test_workqueue.c

index 5198daf4f41a03995f88dde7956109e281bb12a9..65c9fb83fce939445fe8840a2194a5b539c17d37 100644 (file)
@@ -195,6 +195,8 @@ uptime-*.json
 /src/lib/libtor-string-testing.a
 /src/lib/libtor-smartlist-core.a
 /src/lib/libtor-smartlist-core-testing.a
+/src/lib/libtor-thread.a
+/src/lib/libtor-thread-testing.a
 /src/lib/libtor-tls.a
 /src/lib/libtor-tls-testing.a
 /src/lib/libtor-trace.a
index c016310a68e0203c514bf82b5c868956d351f940..be645194aab11094573c89e028567e5885b2843d 100644 (file)
@@ -45,6 +45,7 @@ TOR_UTIL_LIBS = \
         src/lib/libtor-sandbox.a \
        src/lib/libtor-container.a \
        src/lib/libtor-net.a \
+        src/lib/libtor-thread.a \
         src/lib/libtor-log.a \
         src/lib/libtor-lock.a \
         src/lib/libtor-fdio.a \
@@ -65,6 +66,7 @@ TOR_UTIL_TESTING_LIBS = \
         src/lib/libtor-sandbox-testing.a \
        src/lib/libtor-container-testing.a \
        src/lib/libtor-net-testing.a \
+        src/lib/libtor-thread-testing.a \
         src/lib/libtor-log-testing.a \
         src/lib/libtor-lock-testing.a \
         src/lib/libtor-fdio-testing.a \
index 95447d3b84f813511265c295fc22a3febb7de870..574dc5720122498cc4c19efca8e8f745467db03d 100644 (file)
@@ -190,6 +190,6 @@ int tor_mlockall(void);
 ssize_t tor_getpass(const char *prompt, char *output, size_t buflen);
 
 /* This needs some of the declarations above so we include it here. */
-#include "common/compat_threads.h"
+#include "lib/thread/threads.h"
 
 #endif /* !defined(TOR_COMPAT_H) */
index 14e7dcb9fc74a612d637c0959f5f0a6f193fd363..9ed5b30d3adebd8a60a92e984a0b97c30379fd12 100644 (file)
@@ -17,13 +17,6 @@ else
 libor_extra_source=
 endif
 
-if THREADS_PTHREADS
-threads_impl_source=src/common/compat_pthreads.c
-endif
-if THREADS_WIN32
-threads_impl_source=src/common/compat_winthreads.c
-endif
-
 if BUILD_READPASSPHRASE_C
 readpassphrase_source=src/ext/readpassphrase.c
 else
@@ -34,7 +27,6 @@ LIBOR_A_SRC = \
   src/common/address_set.c                             \
   src/common/buffers.c                                 \
   src/common/compat.c                                  \
-  src/common/compat_threads.c                          \
   src/common/compat_time.c                             \
   src/common/conffile.c                                        \
   src/common/memarea.c                                 \
@@ -44,7 +36,6 @@ LIBOR_A_SRC = \
   src/common/token_bucket.c                            \
   src/common/workqueue.c                               \
   $(libor_extra_source)                                        \
-  $(threads_impl_source)                               \
   $(readpassphrase_source)
 
 src/common/src_common_libor_testing_a-log.$(OBJEXT) \
@@ -77,7 +68,6 @@ COMMONHEADERS = \
   src/common/buffers.h                         \
   src/common/compat.h                          \
   src/common/compat_libevent.h                 \
-  src/common/compat_threads.h                  \
   src/common/compat_time.h                     \
   src/common/conffile.h                                \
   src/common/handles.h                         \
index fd31ccd7fd4afab881f8f7327a46092f1e3aa575..4735aadd73e542d05ac0304737532b2eced8ceed 100644 (file)
@@ -26,7 +26,7 @@
 #include "orconfig.h"
 #include "common/compat.h"
 #include "common/compat_libevent.h"
-#include "common/compat_threads.h"
+#include "lib/thread/threads.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "common/util.h"
 #include "common/workqueue.h"
index c83ec0d579fb30b7691c3173a880931f0bdfe3d1..0a8af38b025c6877c17f035ced448f4e9772a816 100644 (file)
@@ -20,6 +20,7 @@ include src/lib/sandbox/include.am
 include src/lib/string/include.am
 include src/lib/smartlist_core/include.am
 include src/lib/testsupport/include.am
+include src/lib/thread/include.am
 include src/lib/tls/include.am
 include src/lib/trace/include.am
 include src/lib/wallclock/include.am
diff --git a/src/lib/thread/.may_include b/src/lib/thread/.may_include
new file mode 100644 (file)
index 0000000..93ad0cd
--- /dev/null
@@ -0,0 +1,6 @@
+orconfig.h
+lib/cc/*.h
+lib/lock/*.h
+lib/log/*.h
+lib/testsupport/*.h
+lib/thread/*.h
similarity index 98%
rename from src/common/compat_pthreads.c
rename to src/lib/thread/compat_pthreads.c
index e345cfef0f2ce115364b8ea9589fe0123787435a..246c6254bb6c9712e623630ac29823ba995310a8 100644 (file)
  */
 
 #include "orconfig.h"
+#include "lib/thread/threads.h"
+#include "lib/log/torlog.h"
+#include "lib/log/util_bug.h"
+
+#include <sys/time.h>
 #include <pthread.h>
 #include <signal.h>
 #include <time.h>
-
-#include "common/compat.h"
-#include "lib/log/torlog.h"
-#include "common/util.h"
+#include <errno.h>
+#include <string.h>
 
 /** Wraps a void (*)(void*) function and its argument so we can
  * invoke them in a way pthreads would expect.
similarity index 96%
rename from src/common/compat_threads.c
rename to src/lib/thread/compat_threads.c
index 87833c6cfae75cdf146b229759a6132551c97dd6..1d685b2c3e939778f5f7071a96ee1a9e3d879605 100644 (file)
 
 #include "orconfig.h"
 #include <stdlib.h>
-#include "common/compat.h"
-#include "common/compat_threads.h"
+#include "lib/thread/threads.h"
 
-#include "common/util.h"
 #include "lib/log/torlog.h"
+#include "lib/log/util_bug.h"
 
 /** Allocate and return a new condition variable. */
 tor_cond_t *
similarity index 98%
rename from src/common/compat_winthreads.c
rename to src/lib/thread/compat_winthreads.c
index d082af31c90018e4fca262a8dd86802dc022e4ed..7f9877d21e084ca5592c48a03579856dc5b0f591 100644 (file)
 
 #ifdef _WIN32
 
-#include "common/compat.h"
 #include <windows.h>
 #include <process.h>
-#include "common/util.h"
+#include "lib/thread/threads.h"
 #include "lib/log/torlog.h"
+#include "lib/log/util_bug.h"
+#include "lib/log/win32err.h"
 
 /* This value is more or less total cargo-cult */
 #define SPIN_COUNT 2000
diff --git a/src/lib/thread/include.am b/src/lib/thread/include.am
new file mode 100644 (file)
index 0000000..0eac7ed
--- /dev/null
@@ -0,0 +1,25 @@
+
+noinst_LIBRARIES += src/lib/libtor-thread.a
+
+if UNITTESTS_ENABLED
+noinst_LIBRARIES += src/lib/libtor-thread-testing.a
+endif
+
+if THREADS_PTHREADS
+threads_impl_source=src/lib/thread/compat_pthreads.c
+endif
+if THREADS_WIN32
+threads_impl_source=src/lib/thread/compat_winthreads.c
+endif
+
+src_lib_libtor_thread_a_SOURCES =                      \
+       src/lib/thread/compat_threads.c                 \
+       $(threads_impl_source)
+
+src_lib_libtor_thread_testing_a_SOURCES = \
+       $(src_lib_libtor_thread_a_SOURCES)
+src_lib_libtor_thread_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
+src_lib_libtor_thread_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+
+noinst_HEADERS +=                                      \
+       src/lib/thread/threads.h
similarity index 99%
rename from src/common/compat_threads.h
rename to src/lib/thread/threads.h
index 69350421b5ffb50c39e4155ef533e2e595de4156..fcccc643d58b325397c780148561b8ff75182665 100644 (file)
@@ -15,6 +15,8 @@
 #include <stdatomic.h>
 #endif
 
+struct timeval;
+
 int spawn_func(void (*func)(void *), void *data);
 void spawn_exit(void) ATTR_NORETURN;
 
index 36f847d2e22784e6b366843c6f93109a5385370b..e17f9e5df251190bdab8f1202138a9e299730747 100644 (file)
@@ -154,6 +154,7 @@ pub fn main() {
             cfg.component("tor-sandbox");
             cfg.component("tor-encoding-testing");
             cfg.component("tor-net");
+            cfg.component("tor-thread-testing");
             cfg.component("tor-log");
             cfg.component("tor-lock");
             cfg.component("tor-fdio");
index 11f41a04445f9ffbeef6084cb1a5cb08e48a328a..e698e4f61830441f09e6d2a4f20ab161ff471db2 100644 (file)
@@ -5,7 +5,7 @@
 
 #include "orconfig.h"
 #include "or/or.h"
-#include "common/compat_threads.h"
+#include "lib/thread/threads.h"
 #include "test/test.h"
 
 /** mutex for thread test to stop the threads hitting data at the same time. */
index 7c525aa28cc1af21c0a436b436d20d2e11eb37b6..5cda99b58e1a93dc460088fb04398c85fdcc69fc 100644 (file)
@@ -4,7 +4,7 @@
 /* See LICENSE for licensing information */
 
 #include "or/or.h"
-#include "common/compat_threads.h"
+#include "lib/thread/threads.h"
 #include "or/onion.h"
 #include "common/workqueue.h"
 #include "lib/crypt_ops/crypto_curve25519.h"