Le 27/05/2016 à 16:51, Peter Maydell a écrit : > Use the safe_syscall wrapper for sigsuspend syscalls. This > means that we will definitely deliver a signal that arrives > before we do the sigsuspend call, rather than blocking first > and delivering afterwards. > > Signed-off-by: Peter Maydell <peter.mayd...@linaro.org>
Reviewed-by: Laurent Vivier <laur...@vivier.eu> > --- > linux-user/syscall.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index e4b7404..083f26f 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -703,6 +703,7 @@ safe_syscall6(int, pselect6, int, nfds, fd_set *, > readfds, fd_set *, writefds, \ > fd_set *, exceptfds, struct timespec *, timeout, void *, sig) > safe_syscall6(int,futex,int *,uaddr,int,op,int,val, \ > const struct timespec *,timeout,int *,uaddr2,int,val3) > +safe_syscall2(int, rt_sigsuspend, sigset_t *, newset, size_t, sigsetsize) > > static inline int host_to_target_sock_type(int host_type) > { > @@ -7007,7 +7008,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long > arg1, > target_to_host_old_sigset(&set, p); > unlock_user(p, arg1, 0); > #endif > - ret = get_errno(sigsuspend(&set)); > + ret = get_errno(safe_rt_sigsuspend(&set, SIGSET_T_SIZE)); > } > break; > #endif > @@ -7018,7 +7019,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long > arg1, > goto efault; > target_to_host_sigset(&set, p); > unlock_user(p, arg1, 0); > - ret = get_errno(sigsuspend(&set)); > + ret = get_errno(safe_rt_sigsuspend(&set, SIGSET_T_SIZE)); > } > break; > case TARGET_NR_rt_sigtimedwait: >