summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/igt_core.c21
-rw-r--r--tests/core_get_client_auth.c8
-rw-r--r--tests/drm_import_export.c4
3 files changed, 27 insertions, 6 deletions
diff --git a/lib/igt_core.c b/lib/igt_core.c
index 40bc92fd..01fb4574 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -45,7 +45,11 @@
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
+#ifdef __linux__
#include <sys/syscall.h>
+#else
+#include <pthread.h>
+#endif
#include <sys/utsname.h>
#include <termios.h>
#include <errno.h>
@@ -1260,8 +1264,6 @@ static void igt_atexit_handler(void)
static void fatal_sig_handler(int sig)
{
- pid_t pid, tid;
-
restore_all_sig_handler();
/*
@@ -1270,11 +1272,20 @@ static void fatal_sig_handler(int sig)
*/
call_exit_handlers(sig);
+ {
+#ifdef __linux__
/* Workaround cached PID and TID races on glibc and Bionic libc. */
- pid = syscall(SYS_getpid);
- tid = syscall(SYS_gettid);
+ pid_t pid = syscall(SYS_getpid);
+ pid_t tid = syscall(SYS_gettid);
- syscall(SYS_tgkill, pid, tid, sig);
+ syscall(SYS_tgkill, pid, tid, sig);
+#else
+ pthread_t tid = pthread_self();
+ union sigval value = { .sival_ptr = NULL };
+
+ pthread_sigqueue(tid, sig, value);
+#endif
+ }
}
/**
diff --git a/tests/core_get_client_auth.c b/tests/core_get_client_auth.c
index eef97e02..bbfdddf4 100644
--- a/tests/core_get_client_auth.c
+++ b/tests/core_get_client_auth.c
@@ -37,7 +37,11 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
+#ifdef __linux__
# include <sys/syscall.h>
+#else
+# include <pthread.h>
+#endif
#include "drm.h"
#include "ioctl_wrappers.h"
@@ -47,7 +51,9 @@
static bool
is_local_tid(pid_t tid)
{
-#ifndef ANDROID
+#ifndef __linux__
+ return pthread_self() == tid;
+#elif !defined(ANDROID)
/* On Linux systems, drmGetClient() would return the thread ID
instead of the actual process ID */
return syscall(SYS_gettid) == tid;
diff --git a/tests/drm_import_export.c b/tests/drm_import_export.c
index 83e753bf..57b13ddb 100644
--- a/tests/drm_import_export.c
+++ b/tests/drm_import_export.c
@@ -121,7 +121,11 @@ static void start_test(void)
static void * test_thread(void * par)
{
+#ifdef __linux__
igt_debug("start %ld\n", syscall(SYS_gettid));
+#else
+ igt_debug("start %ld\n", (long) pthread_self());
+#endif
start_test();
return NULL;