From f077a4a9f027b938bd091583e3ec34725cba428c Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 18 Dec 2002 00:53:21 +0000 Subject: Update. 2002-12-17 Jakub Jelinek * 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. --- sysdeps/unix/sysv/linux/x86_64/recv.c | 14 +++++++++++--- sysdeps/unix/sysv/linux/x86_64/send.c | 13 +++++++++++-- 2 files changed, 22 insertions(+), 5 deletions(-) (limited to 'sysdeps/unix') 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 #include -#include +#include /* 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 #include -#include +#include /* 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) -- cgit 1.4.1