Commit 0c4f152e authored by Tijl Coosemans's avatar Tijl Coosemans Committed by Alexandre Julliard

server: Use thr_kill2 syscall to signal threads on FreeBSD.

parent d0ce7ec5
......@@ -15689,6 +15689,7 @@ esac
for ac_func in \
_pclose \
_popen \
......@@ -15746,6 +15747,7 @@ for ac_func in \
strncasecmp \
strtold \
tcgetattr \
thr_kill2 \
timegm \
usleep \
vsnprintf \
......
......@@ -1287,6 +1287,7 @@ AC_CHECK_FUNCS(\
strncasecmp \
strtold \
tcgetattr \
thr_kill2 \
timegm \
usleep \
vsnprintf \
......
......@@ -849,6 +849,9 @@
/* Define to 1 if you have the <termios.h> header file. */
#undef HAVE_TERMIOS_H
/* Define to 1 if you have the `thr_kill2' function. */
#undef HAVE_THR_KILL2
/* Define to 1 if you have the `timegm' function. */
#undef HAVE_TIMEGM
......
......@@ -35,6 +35,10 @@
#ifdef HAVE_SYS_WAIT_H
# include <sys/wait.h>
#endif
#ifdef HAVE_SYS_THR_H
# include <sys/ucontext.h>
# include <sys/thr.h>
#endif
#include <unistd.h>
#include "ntstatus.h"
......@@ -206,9 +210,8 @@ static int wait4_thread( struct thread *thread, int signal )
/* send a signal to a specific thread */
static inline int tkill( int tgid, int pid, int sig )
{
int ret = -ENOSYS;
#ifdef __linux__
int ret = -ENOSYS;
# ifdef __i386__
__asm__( "pushl %%ebx\n\t"
"movl %2,%%ebx\n\t"
......@@ -227,11 +230,15 @@ static inline int tkill( int tgid, int pid, int sig )
__asm__( "syscall" : "=a" (ret)
: "0" (200) /*SYS_tkill*/, "D" (pid), "S" (sig) );
# endif
#endif /* __linux__ */
if (ret >= 0) return ret;
errno = -ret;
return -1;
#elif defined(__FreeBSD__) && defined(HAVE_THR_KILL2)
return thr_kill2( tgid, pid, sig );
#else
errno = ENOSYS;
return -1;
#endif
}
/* initialize the process tracing mechanism */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment