diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/x86_64/send.c')
-rw-r--r-- | sysdeps/unix/sysv/linux/x86_64/send.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/sysdeps/unix/sysv/linux/x86_64/send.c b/sysdeps/unix/sysv/linux/x86_64/send.c index bfbd212dc6..c484ce69fe 100644 --- a/sysdeps/unix/sysv/linux/x86_64/send.c +++ b/sysdeps/unix/sysv/linux/x86_64/send.c @@ -18,13 +18,22 @@ #include <errno.h> #include <sys/socket.h> -#include <sysdep.h> +#include <sysdep-cancel.h> /* Send N bytes of BUF to socket FD. Returns the number sent or -1. */ ssize_t __libc_send (int fd, const void *buf, size_t n, int flags) { - return INLINE_SYSCALL (sendto, 6, fd, buf, n, flags, NULL, NULL); + if (SINGLE_THREAD_P) + return INLINE_SYSCALL (sendto, 6, fd, buf, n, flags, NULL, NULL); + + int oldtype = LIBC_CANCEL_ASYNC (); + + ssize_t result = INLINE_SYSCALL (sendto, 6, fd, buf, n, flags, NULL, NULL); + + LIBC_CANCEL_RESET (oldtype); + + return result; } weak_alias (__libc_send, __send) |