]> granicus.if.org Git - libevent/commitdiff
test: fix compilation under win32 (rearrange thread_setup() code)
authorAzat Khuzhin <azat@libevent.org>
Mon, 13 Jan 2020 21:27:21 +0000 (00:27 +0300)
committerAzat Khuzhin <azat@libevent.org>
Mon, 13 Jan 2020 22:44:06 +0000 (01:44 +0300)
test/regress.h
test/regress_main.c
test/regress_thread.c
test/regress_thread.h

index 07a48339592f557251158f0f661970e8d97b84c4..55a2fddb9ba573bbce7dfbc8429cf484b2769cbd 100644 (file)
@@ -141,7 +141,6 @@ SSL_CTX *get_ssl_ctx(void);
 void init_ssl(void);
 #endif
 
-void   thread_setup(pthread_t pthread);
 void * basic_test_setup(const struct testcase_t *testcase);
 int    basic_test_cleanup(const struct testcase_t *testcase, void *ptr);
 
index 31641d680819ecb2492af117bb07b3117587326e..ce5c38cc7df0ede52aee7b4974d92788493a06a9 100644 (file)
 
 #include "event2/event-config.h"
 #include "regress.h"
+#include "regress_thread.h"
 #include "tinytest.h"
 #include "tinytest_macros.h"
 #include "../iocp-internal.h"
 #include "../event-internal.h"
+#include "../evthread-internal.h"
 
 struct evutil_weakrand_state test_weakrand_state;
 
@@ -186,52 +188,6 @@ ignore_log_cb(int s, const char *msg)
 {
 }
 
-#if defined(__APPLE__)
-
-#ifdef EVENT__HAVE_MACH_MACH_H
-#include <mach/mach.h>
-#endif
-#ifdef EVENT__HAVE_MACH_MACH_TIME_H
-#include <mach/mach_time.h>
-#endif
-#include <pthread.h>
-
-/**
- * Put into the real time scheduling class for better timers latency.
- * https://developer.apple.com/library/archive/technotes/tn2169/_index.html#//apple_ref/doc/uid/DTS40013172-CH1-TNTAG6000
- */
-void move_pthread_to_realtime_scheduling_class(pthread_t pthread)
-{
-       mach_timebase_info_data_t timebase_info;
-       mach_timebase_info(&timebase_info);
-
-       const uint64_t NANOS_PER_MSEC = 1000000ULL;
-       double clock2abs = ((double)timebase_info.denom / (double)timebase_info.numer) * NANOS_PER_MSEC;
-
-       thread_time_constraint_policy_data_t policy;
-       policy.period      = 0;
-       policy.computation = (uint32_t)(5 * clock2abs); // 5 ms of work
-       policy.constraint  = (uint32_t)(10 * clock2abs);
-       policy.preemptible = FALSE;
-
-       int kr = thread_policy_set(pthread_mach_thread_np(pthread_self()),
-               THREAD_TIME_CONSTRAINT_POLICY,
-               (thread_policy_t)&policy,
-               THREAD_TIME_CONSTRAINT_POLICY_COUNT);
-       if (kr != KERN_SUCCESS) {
-               mach_error("thread_policy_set:", kr);
-               exit(1);
-       }
-}
-
-void thread_setup(pthread_t pthread)
-{
-       move_pthread_to_realtime_scheduling_class(pthread);
-}
-#else
-void thread_setup(pthread_t pthread) {}
-#endif
-
 void *
 basic_test_setup(const struct testcase_t *testcase)
 {
@@ -245,7 +201,9 @@ basic_test_setup(const struct testcase_t *testcase)
                evthread_flags |= EVTHREAD_PTHREAD_PRIO_INHERIT;
 #endif
 
-       thread_setup(pthread_self());
+#ifndef EVENT__DISABLE_THREAD_SUPPORT
+       thread_setup(THREAD_SELF());
+#endif
 
 #ifndef _WIN32
        if (testcase->flags & TT_ENABLE_IOCP_FLAG)
index 3f46764d564164960bdb32fc88849cb2d4fac4dc..312f985c0ba3d8ed9aa831a531d057493007cfea 100644 (file)
 #include "time-internal.h"
 #include "regress_thread.h"
 
+/**
+ * Put into the real time scheduling class for better timers latency.
+ * https://developer.apple.com/library/archive/technotes/tn2169/_index.html#//apple_ref/doc/uid/DTS40013172-CH1-TNTAG6000
+ */
+#if defined(__APPLE__)
+#ifdef EVENT__HAVE_MACH_MACH_H
+#include <mach/mach.h>
+#endif
+#ifdef EVENT__HAVE_MACH_MACH_TIME_H
+#include <mach/mach_time.h>
+#endif
+static void move_pthread_to_realtime_scheduling_class(pthread_t pthread)
+{
+       mach_timebase_info_data_t info;
+       mach_timebase_info(&info);
+
+       const uint64_t NANOS_PER_MSEC = 1000000ULL;
+       double clock2abs =
+               ((double)info.denom / (double)info.numer) * NANOS_PER_MSEC;
+
+       thread_time_constraint_policy_data_t policy;
+       policy.period      = 0;
+       policy.computation = (uint32_t)(5 * clock2abs); // 5 ms of work
+       policy.constraint  = (uint32_t)(10 * clock2abs);
+       policy.preemptible = FALSE;
+
+       int kr = thread_policy_set(pthread_mach_thread_np(pthread_self()),
+               THREAD_TIME_CONSTRAINT_POLICY,
+               (thread_policy_t)&policy,
+               THREAD_TIME_CONSTRAINT_POLICY_COUNT);
+       if (kr != KERN_SUCCESS) {
+               mach_error("thread_policy_set:", kr);
+               exit(1);
+       }
+}
+
+void thread_setup(THREAD_T pthread)
+{
+       move_pthread_to_realtime_scheduling_class(pthread);
+}
+#else /** \__APPLE__ */
+void thread_setup(THREAD_T pthread) {}
+#endif /** \!__APPLE__ */
+
+
 struct cond_wait {
        void *lock;
        void *cond;
index ca79bc5c6a513ed98b14e1ce87b22b4f89d109c9..21a62a4d24bea40f2b175eaa65b08d8e36419d65 100644 (file)
@@ -34,6 +34,7 @@
 #define THREAD_T pthread_t
 #define THREAD_FN void *
 #define THREAD_RETURN() return (NULL)
+#define THREAD_SELF() pthread_self()
 #define THREAD_START(threadvar, fn, arg) do {          \
        if (!pthread_create(&(threadvar), NULL, fn, arg))  \
                thread_setup(threadvar);                       \
 #define THREAD_T HANDLE
 #define THREAD_FN unsigned __stdcall
 #define THREAD_RETURN() return (0)
-#define THREAD_START(threadvar, fn, arg) do {          \
+#define THREAD_SELF() GetCurrentThreadId()
+#define THREAD_START(threadvar, fn, arg) do {                         \
        uintptr_t threadhandle = _beginthreadex(NULL,0,fn,(arg),0,NULL);  \
        (threadvar) = (HANDLE) threadhandle;                              \
+       thread_setup(threadvar);                                          \
 } while (0)
 #define THREAD_JOIN(th) WaitForSingleObject(th, INFINITE)
 #endif
 
+void thread_setup(THREAD_T pthread);
+
 #endif