diff options
author | Ulrich Drepper <drepper@redhat.com> | 2002-12-18 00:53:21 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2002-12-18 00:53:21 +0000 |
commit | f077a4a9f027b938bd091583e3ec34725cba428c (patch) | |
tree | 6052d47da431d7cd5e745dab1a908a5f54ffbfc7 /sysdeps | |
parent | a7d5c29129aab547faff1fd2cfe0d9095ec4689b (diff) | |
download | glibc-f077a4a9f027b938bd091583e3ec34725cba428c.tar.gz glibc-f077a4a9f027b938bd091583e3ec34725cba428c.tar.xz glibc-f077a4a9f027b938bd091583e3ec34725cba428c.zip |
Update.
2002-12-17 Jakub Jelinek <jakub@redhat.com> * malloc/thread-m.h (mutex_init, mutex_lock, mutex_trylock, mutex_unlock): If not building NPTL, use __libc_maybe_call2 if available, otherwise __libc_maybe_call. * sysdeps/unix/sysv/linux/x86_64/recv.c: Add support for cancellation handling. * sysdeps/unix/sysv/linux/x86_64/send.c: Likewise.
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/unix/sysv/linux/x86_64/recv.c | 14 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/x86_64/send.c | 13 |
2 files changed, 22 insertions, 5 deletions
diff --git a/sysdeps/unix/sysv/linux/x86_64/recv.c b/sysdeps/unix/sysv/linux/x86_64/recv.c index 9ffeb5e7ed..2fa1794d3c 100644 --- a/sysdeps/unix/sysv/linux/x86_64/recv.c +++ b/sysdeps/unix/sysv/linux/x86_64/recv.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -18,7 +18,7 @@ #include <errno.h> #include <sys/socket.h> -#include <sysdep.h> +#include <sysdep-cancel.h> /* Read N bytes into BUF from socket FD. Returns the number read or -1 for errors. */ @@ -26,8 +26,16 @@ ssize_t __libc_recv (int fd, void *buf, size_t n, int flags) { + if (SINGLE_THREAD_P) + return INLINE_SYSCALL (recvfrom, 6, fd, buf, n, flags, NULL, NULL); - return INLINE_SYSCALL (recvfrom, 6, fd, buf, n, flags, NULL, NULL); + int oldtype = LIBC_CANCEL_ASYNC (); + + ssize_t result = INLINE_SYSCALL (recvfrom, 6, fd, buf, n, flags, NULL, NULL); + + LIBC_CANCEL_RESET (oldtype); + + return result; } weak_alias (__libc_recv, __recv) 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) |