diff options
Diffstat (limited to 'libc/sysdeps/linux/common/waitpid.c')
| -rw-r--r-- | libc/sysdeps/linux/common/waitpid.c | 29 | 
1 files changed, 22 insertions, 7 deletions
| diff --git a/libc/sysdeps/linux/common/waitpid.c b/libc/sysdeps/linux/common/waitpid.c index e46499377..d0437194d 100644 --- a/libc/sysdeps/linux/common/waitpid.c +++ b/libc/sysdeps/linux/common/waitpid.c @@ -1,5 +1,6 @@  /* vi: set sw=4 ts=4: */  /* + * Copyright (C) 2006 Steven J. Hill <sjhill@realitydiluted.com>   * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>   *   * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. @@ -10,13 +11,27 @@  #include <sys/wait.h>  #include <sys/resource.h> -__pid_t waitpid(__pid_t pid, int *wait_stat, int options) +#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +#include "sysdep-cancel.h" +#else +#define SINGLE_THREAD_P 1 +#endif + +libc_hidden_proto(wait4) + +extern __typeof(waitpid) __libc_waitpid; +__pid_t __libc_waitpid(__pid_t pid, int *wait_stat, int options)  { -	return wait4(pid, wait_stat, options, NULL); +	if (SINGLE_THREAD_P) +		return wait4(pid, wait_stat, options, NULL); + +#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +	int oldtype = LIBC_CANCEL_ASYNC (); +	int result = wait4(pid, wait_stat, options, NULL); +	LIBC_CANCEL_RESET (oldtype); +	return result; +#endif  } -#ifndef __LINUXTHREADS_OLD__ -libc_hidden_def(waitpid) -#else +libc_hidden_proto(waitpid) +weak_alias(__libc_waitpid,waitpid)  libc_hidden_weak(waitpid) -strong_alias(waitpid,__libc_waitpid) -#endif | 
