diff --git a/meson.build b/meson.build index de8cd75d78345031059568dca2d09dbffdcc61db..70ba26f9783f31890a90184c75a15f041d18e177 100644 --- a/meson.build +++ b/meson.build @@ -70,6 +70,11 @@ elif host_system == 'linux' os_deps += [cc.find_library('rt', required : false)] os_deps += [dependency('threads')] have_posix = true +elif (host_system == 'dragonfly' or host_system == 'freebsd' or + host_system == 'netbsd' or host_system == 'openbsd') + os_cflags += ['-DWEBRTC_BSD', '-DWEBRTC_THREAD_RR'] + os_deps += [dependency('threads')] + have_posix = true elif host_system == 'windows' platform_cflags += ['-DWEBRTC_WIN', '-D_WIN32', '-U__STRICT_ANSI__'] os_deps += [cc.find_library('winmm')] diff --git a/webrtc/rtc_base/platform_thread_types.cc b/webrtc/rtc_base/platform_thread_types.cc index b0243b41dc80d476321401b8dace27091c53e0cd..1315aae1b5ab1ffb7cfeba4456dbdf480e4e9ff7 100644 --- a/webrtc/rtc_base/platform_thread_types.cc +++ b/webrtc/rtc_base/platform_thread_types.cc @@ -15,6 +15,12 @@ #include <sys/syscall.h> #endif +#if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__) // WEBRTC_BSD +#include <pthread_np.h> +#elif defined(__NetBSD__) // WEBRTC_BSD +#include <lwp.h> +#endif + #if defined(WEBRTC_WIN) #include "rtc_base/arraysize.h" @@ -39,6 +45,12 @@ PlatformThreadId CurrentThreadId() { return zx_thread_self(); #elif defined(WEBRTC_LINUX) return syscall(__NR_gettid); +#elif defined(__DragonFly__) || defined(__FreeBSD__) // WEBRTC_BSD + return pthread_getthreadid_np(); +#elif defined(__NetBSD__) // WEBRTC_BSD + return _lwp_self(); +#elif defined(__OpenBSD__) // WEBRTC_BSD + return getthrid(); #elif defined(__EMSCRIPTEN__) return static_cast<PlatformThreadId>(pthread_self()); #else @@ -109,6 +121,10 @@ void SetCurrentThreadName(const char* name) { prctl(PR_SET_NAME, reinterpret_cast<unsigned long>(name)); // NOLINT #elif defined(WEBRTC_MAC) || defined(WEBRTC_IOS) pthread_setname_np(name); +#elif defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__) // WEBRTC_BSD + pthread_set_name_np(pthread_self(), name); +#elif defined(__NetBSD__) // WEBRTC_BSD + pthread_setname_np(pthread_self(), "%s", (void*)name); #endif }