diff --git a/meson.build b/meson.build index 8d85d56..05a434a 100644 --- a/meson.build +++ b/meson.build @@ -87,6 +87,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'] # this one is for MinGW to get format specifiers from inttypes.h in C++ diff --git a/webrtc/rtc_base/platform_thread_types.cc b/webrtc/rtc_base/platform_thread_types.cc index d64ea68..e98e8ec 100644 --- a/webrtc/rtc_base/platform_thread_types.cc +++ b/webrtc/rtc_base/platform_thread_types.cc @@ -15,6 +15,12 @@ #include #endif +#if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__) // WEBRTC_BSD +#include +#elif defined(__NetBSD__) // WEBRTC_BSD +#include +#endif + #if defined(WEBRTC_WIN) #include "rtc_base/arraysize.h" @@ -46,6 +52,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(pthread_self()); #else @@ -116,6 +128,10 @@ void SetCurrentThreadName(const char* name) { prctl(PR_SET_NAME, reinterpret_cast(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); #elif defined(WEBRTC_FUCHSIA) zx_status_t status = zx_object_set_property(zx_thread_self(), ZX_PROP_NAME, name, strlen(name));