server: Use thr_kill2 syscall to signal threads on FreeBSD.
This commit is contained in:
parent
d0ce7ec599
commit
0c4f152ec7
|
@ -15687,6 +15687,7 @@ esac
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
for ac_func in \
|
||||
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue