diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2016-05-27 15:51:48 +0100 |
---|---|---|
committer | Riku Voipio <riku.voipio@linaro.org> | 2016-06-07 16:39:06 +0300 |
commit | 2fe4fba115b5b9f7e6722720c57810e0fc64b9b5 (patch) | |
tree | 6bcbbaee3781d5ebc03c84cec6a476b4fd5b3d4b | |
parent | b28a1f333a5875e6f48725efd19c76fc3d27d8d1 (diff) | |
download | qemu-2fe4fba115b5b9f7e6722720c57810e0fc64b9b5.zip qemu-2fe4fba115b5b9f7e6722720c57810e0fc64b9b5.tar.gz qemu-2fe4fba115b5b9f7e6722720c57810e0fc64b9b5.tar.bz2 |
linux-user: Use safe_syscall for sigsuspend syscalls
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.maydell@linaro.org>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
-rw-r--r-- | linux-user/syscall.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/linux-user/syscall.c b/linux-user/syscall.c index d2749a6..5bdfe2a 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -716,6 +716,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) { @@ -7648,7 +7649,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 @@ -7659,7 +7660,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: |