]> sourceware.org Git - glibc.git/commitdiff
Update.
authorUlrich Drepper <drepper@redhat.com>
Sun, 8 Dec 2002 08:25:05 +0000 (08:25 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sun, 8 Dec 2002 08:25:05 +0000 (08:25 +0000)
* scripts/output-format.sed: Fix bug in one of the s expressions
which used / for one too many things.

49 files changed:
ChangeLog
nptl/ChangeLog
nptl/Versions
nptl/cancellation.c
nptl/pt-accept.c
nptl/pt-close.c
nptl/pt-connect.c
nptl/pt-creat.c
nptl/pt-fcntl.c
nptl/pt-fsync.c
nptl/pt-lseek.c
nptl/pt-lseek64.c
nptl/pt-msgrcv.c
nptl/pt-msgsnd.c
nptl/pt-msync.c
nptl/pt-nanosleep.c
nptl/pt-open.c
nptl/pt-open64.c
nptl/pt-pause.c
nptl/pt-poll.c
nptl/pt-pread.c
nptl/pt-pread64.c
nptl/pt-pselect.c
nptl/pt-pwrite.c
nptl/pt-pwrite64.c
nptl/pt-read.c
nptl/pt-readv.c
nptl/pt-recv.c
nptl/pt-recvfrom.c
nptl/pt-recvmsg.c
nptl/pt-select.c
nptl/pt-send.c
nptl/pt-sendmsg.c
nptl/pt-sendto.c
nptl/pt-sigpause.c
nptl/pt-sigsuspend.c
nptl/pt-sigtimedwait.c
nptl/pt-sigwait.c
nptl/pt-sigwaitinfo.c
nptl/pt-system.c
nptl/pt-tcdrain.c
nptl/pt-wait.c
nptl/pt-waitid.c
nptl/pt-waitpid.c
nptl/pt-write.c
nptl/pt-writev.c
nptl/pthreadP.h
nptl/sem_unlink.c
scripts/output-format.sed

index e8e14deb3c28d605d4ee946e5931b157d49e7f3d..879f9ba95903d2f61599662003b244f12d101102 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2002-12-08  Ulrich Drepper  <drepper@redhat.com>
 
+       * scripts/output-format.sed: Fix bug in one of the s expressions
+       which used / for one too many things.
+
        * include/unistd.h: Declare __libc_close.
 
 2002-12-07  Ulrich Drepper  <drepper@redhat.com>
index d2544922a6401c868a5fa8e0ec8804cb9a4d9650..f9686e09cb5a9783df25d7b34329d97e56acb16f 100644 (file)
@@ -1,3 +1,58 @@
+2002-12-08  Ulrich Drepper  <drepper@redhat.com>
+
+       * pthreadP.h: Declare __pthread_enable_asynccancel and
+       __pthread_disable_asynccancel.
+       (CANCEL_ASYNC): Use __pthread_enable_asynccancel.
+       (CANCEL_RESET): Use __pthread_disable_asynccancel.
+       * cancellation.c (__pthread_enable_asynccancel): New function.
+       (__pthread_disable_asynccancel): New function.
+       * pt-accept.c: Adjust for CANCEL_ASYNC and CANCEL_RESET change.
+       * pt-close.c: Likewise.
+       * pt-connect.c: Likewise.
+       * pt-creat.c: Likewise.
+       * pt-fcntl.c: Likewise.
+       * pt-fsync.c: Likewise.
+       * pt-lseek.c: Likewise.
+       * pt-lseek64.c: Likewise.
+       * pt-msgrcv.c: Likewise.
+       * pt-msgsnd.c: Likewise.
+       * pt-msync.c: Likewise.
+       * pt-nanosleep.c: Likewise.
+       * pt-open.c: Likewise.
+       * pt-open64.c: Likewise.
+       * pt-pause.c: Likewise.
+       * pt-poll.c: Likewise.
+       * pt-pread.c: Likewise.
+       * pt-pread64.c: Likewise.
+       * pt-pselect.c: Likewise.
+       * pt-pwrite.c: Likewise.
+       * pt-pwrite64.c: Likewise.
+       * pt-read.c: Likewise.
+       * pt-readv.c: Likewise.
+       * pt-recv.c: Likewise.
+       * pt-recvfrom.c: Likewise.
+       * pt-recvmsg.c: Likewise.
+       * pt-select.c: Likewise.
+       * pt-send.c: Likewise.
+       * pt-sendmsg.c: Likewise.
+       * pt-sendto.c: Likewise.
+       * pt-sigpause.c: Likewise.
+       * pt-sigsuspend.c: Likewise.
+       * pt-sigtimedwait.c: Likewise.
+       * pt-sigwait.c: Likewise.
+       * pt-sigwaitinfo.c: Likewise.
+       * pt-system.c: Likewise.
+       * pt-tcdrain.c: Likewise.
+       * pt-wait.c: Likewise.
+       * pt-waitid.c: Likewise.
+       * pt-waitpid.c: Likewise.
+       * pt-write.c: Likewise.
+       * pt-writev.c: Likewise.
+
+       * pt-sigpause.c (sigsuspend): Call __sigsuspend.
+       (__xpg_sigpause): New function.
+       * Versions (libpthread:GLIBC_2.3.2): Add __xpg_sigpause.
+
 2002-12-07  Ulrich Drepper  <drepper@redhat.com>
 
        * Makefile (CFLAGS-ftrylockfile.c): Add -D_IO_MTSAFE_IO.
index ce11c67295b17d8bf00668003f83a98320a4d1e2..e85db80a3ac5c2415ad8d7413889dc6603dde456 100644 (file)
@@ -190,12 +190,12 @@ libpthread {
   }
 
   # XXX Adjust number for final release.
-  GLIBC_2.3.1 {
+  GLIBC_2.3.2 {
     # Proposed API extensions.
     pthread_tryjoin_np; pthread_timedjoin_np;
 
     creat; poll; pselect; readv; select; sigpause; sigsuspend; sigwait;
-    sigwaitinfo; waitid; writev;
+    sigwaitinfo; waitid; writev;  __xpg_sigpause;
   }
 
   GLIBC_PRIVATE {
index 890b26ec4e234a3277753b4bdd4a46d22b121059..3cdc57488021cb877487d99f40980d8e57efd367 100644 (file)
@@ -20,6 +20,7 @@
 #include <setjmp.h>
 #include <stdlib.h>
 #include "pthreadP.h"
+#include "atomic.h"
 
 
 /* This function is responsible for calling all registered cleanup
@@ -90,3 +91,64 @@ __cleanup_thread (struct pthread *self, char *currentframe)
        }
     }
 }
+
+
+/* The next two functions are similar to pthread_setcanceltype() but
+   more specialized for the use in the cancelable functions like write().
+   They do not need to check parameters etc.  */
+int
+attribute_hidden
+__pthread_enable_asynccancel (void)
+{
+  struct pthread *self = THREAD_SELF;
+  int oldval;
+
+  while (1)
+    {
+      oldval = THREAD_GETMEM (self, cancelhandling);
+      int newval = oldval | CANCELTYPE_BITMASK;
+
+      if (newval == oldval)
+       break;
+
+      if (atomic_compare_and_exchange_acq (&self->cancelhandling, newval,
+                                          oldval) == 0)
+       {
+         if (CANCEL_ENABLED_AND_CANCELED_AND_ASYNCHRONOUS (newval))
+           {
+             THREAD_SETMEM (self, result, PTHREAD_CANCELED);
+             __do_cancel (CURRENT_STACK_FRAME);
+           }
+
+         break;
+       }
+    }
+
+  return oldval;
+}
+
+
+void
+attribute_hidden
+__pthread_disable_asynccancel (int oldtype)
+{
+  /* If asynchronous cancellation was enabled before we do not have
+     anything to do.  */
+  if (oldtype & CANCELTYPE_BITMASK)
+    return;
+
+  struct pthread *self = THREAD_SELF;
+
+  while (1)
+    {
+      int oldval = THREAD_GETMEM (self, cancelhandling);
+      int newval = oldval & ~CANCELTYPE_BITMASK;
+
+      if (newval == oldval)
+       break;
+
+      if (atomic_compare_and_exchange_acq (&self->cancelhandling, newval,
+                                          oldval) == 0)
+       break;
+    }
+}
index 09e2c52efd826b2ca4ffe6e3bf4dc8be78f2096e..1b25e9eff82b2d2a3ff1b6747170e36edb2f6953 100644 (file)
 int
 accept (int fd, __SOCKADDR_ARG addr, socklen_t *addr_len)
 {
-  int oldtype;
-  int result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_accept (fd, addr, addr_len);
+  int result = __libc_accept (fd, addr, addr_len);
 
   CANCEL_RESET (oldtype);
 
index 85115c9c2370aeb0b753384815c45f482a2752ae..0edde5ea5d4777cd70772e8de725b2a0ad19bd01 100644 (file)
 int
 __close (int fd)
 {
-  int oldtype;
-  int result;
-
-  CANCEL_ASYNC (oldtype);
+  int oldtype = CANCEL_ASYNC ();
 
 #ifdef INLINE_SYSCALL
-  result = INLINE_SYSCALL (close, 1, fd);
+  int result = INLINE_SYSCALL (close, 1, fd);
 #else
-  result = __libc_close (fd);
+  int result = __libc_close (fd);
 #endif
 
   CANCEL_RESET (oldtype);
index 105cb6218d304cc130921ddfdbdec12e52d8c94a..44d2e3ae217e04f046ade57af1ffc7ddc1667356 100644 (file)
 int
 __connect (int fd, __CONST_SOCKADDR_ARG addr, socklen_t addr_len)
 {
-  int oldtype;
-  int result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_connect (fd, addr, addr_len);
+  int result = __libc_connect (fd, addr, addr_len);
 
   CANCEL_RESET (oldtype);
 
index bdb5e4f561ad655d90c1568b4513937bf67144d5..f1783f1f60aaabf28d250e41b25ccba312c00a9c 100644 (file)
 int
 creat (const char *pathname, mode_t mode)
 {
-  int result;
-  int oldtype;
-
-  CANCEL_ASYNC (oldtype);
+  int oldtype = CANCEL_ASYNC ();
 
 #if defined INLINE_SYSCALL && defined __NR_creat
-  result = INLINE_SYSCALL (creat, 2, pathname, mode);
+  int result = INLINE_SYSCALL (creat, 2, pathname, mode);
 #else
-  result = __libc_open (pathname, O_WRONLY|O_CREAT|O_TRUNC, mode);
+  int result = __libc_open (pathname, O_WRONLY|O_CREAT|O_TRUNC, mode);
 #endif
 
   CANCEL_RESET (oldtype);
index 194f6ca52be394c2c9e0dba3e8c0a58d39cb9e38..9d7f68e4c1f6616b5877b63479271b20383ab283 100644 (file)
@@ -30,18 +30,17 @@ int
 __fcntl (int fd, int cmd, ...)
 {
   int oldtype;
-  int result;
   va_list ap;
 
   if (cmd == F_SETLKW)
-    CANCEL_ASYNC (oldtype);
+    oldtype = CANCEL_ASYNC ();
 
   va_start (ap, cmd);
 
 #ifdef INLINE_SYSCALL
-  result = INLINE_SYSCALL (fcntl, 3, fd, cmd, va_arg (ap, long int));
+  int result = INLINE_SYSCALL (fcntl, 3, fd, cmd, va_arg (ap, long int));
 #else
-  result = __libc_fcntl (fd, cmd, va_arg (ap, long int));
+  int result = __libc_fcntl (fd, cmd, va_arg (ap, long int));
 #endif
 
   va_end (ap);
index 6c41912a7b901db045080ef3c7d7fc594f2b063a..91fd266ed9a27c9c94727a8f85aaf6ad4d80437e 100644 (file)
 int
 fsync (int fd)
 {
-  int oldtype;
-  int result;
-
-  CANCEL_ASYNC (oldtype);
+  int oldtype = CANCEL_ASYNC ();
 
 #ifdef INLINE_SYSCALL
-  result = INLINE_SYSCALL (fsync, 1, fd);
+  int result = INLINE_SYSCALL (fsync, 1, fd);
 #else
-  result = __libc_fsync (fd);
+  int result = __libc_fsync (fd);
 #endif
 
   CANCEL_RESET (oldtype);
index 31e3ef700e81d4d9a27969acec319625e0f0f4c0..9b530ea9e74d6f865a882bbf27d30afb7f4b093a 100644 (file)
 off_t
 __lseek (int fd, off_t offset, int whence)
 {
-  int oldtype;
-  off_t result;
-
-  CANCEL_ASYNC (oldtype);
+  int oldtype = CANCEL_ASYNC ();
 
 #ifdef INLINE_SYSCALL
-  result = INLINE_SYSCALL (lseek, 3, fd, offset, whence);
+  off_t result = INLINE_SYSCALL (lseek, 3, fd, offset, whence);
 #else
-  result = __libc_lseek (fd, offset, whence);
+  off_t result = __libc_lseek (fd, offset, whence);
 #endif
 
   CANCEL_RESET (oldtype);
index f9faa16402ee53d81bbbb499302363f1e48920c8..bdedd6e1cf9eb561601d802be8b657eca19055fb 100644 (file)
 off64_t
 lseek64 (int fd, off64_t offset, int whence)
 {
-  int oldtype;
-  off64_t result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_lseek64 (fd, offset, whence);
+  off64_t result = __libc_lseek64 (fd, offset, whence);
 
   CANCEL_RESET (oldtype);
 
index b8bf6bc56c5555b146fb535362801bd1de1e4683..383cefaa403079f5a27f392f55bed48c952bee71 100644 (file)
 int
 msgrcv (int msqid, void *msgp, size_t msgsz, long int msgtyp, int msgflg)
 {
-  int oldtype;
-  int result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_msgrcv (msqid, msgp, msgsz, msgtyp, msgflg);
+  int result = __libc_msgrcv (msqid, msgp, msgsz, msgtyp, msgflg);
 
   CANCEL_RESET (oldtype);
 
index 4297f9dc4e48c28e300db25f3ae20d2ed1207853..bc09779c2e331745a4c1856a6d75821d885dc5e4 100644 (file)
 int
 msgsnd (int msqid, const void *msgp, size_t msgsz, int msgflg)
 {
-  int result;
-  int oldtype;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-#ifdef INLINE_SYSCALL
-  result = INLINE_SYSCALL (ipc, 5, IPCOP_msgsnd, msqid, msgsz,
-                          msgflg, (void *) msgp);
+#if defined INLINE_SYSCALL && defined __NR_ipc
+  int result = INLINE_SYSCALL (ipc, 5, IPCOP_msgsnd, msqid, msgsz,
+                              msgflg, (void *) msgp);
 #else
-  result = __libc_msgsnd (msqid, msgp, msgsz, msgflg);
+  int result = __libc_msgsnd (msqid, msgp, msgsz, msgflg);
 #endif
 
   CANCEL_RESET (oldtype);
index c1d64454ca85f59bf10253f9095c450c94a28e27..18f3eeb2846b93ab5c7c308eff512128aec97a52 100644 (file)
 int
 msync (void *addr, size_t length, int flags)
 {
-  int oldtype;
-  int result;
-
-  CANCEL_ASYNC (oldtype);
+  int oldtype = CANCEL_ASYNC ();
 
 #ifdef INLINE_SYSCALL
-  result = INLINE_SYSCALL (msync, 3, addr, length, flags);
+  int result = INLINE_SYSCALL (msync, 3, addr, length, flags);
 #else
-  result = __libc_msync (addr, length, flags);
+  int result = __libc_msync (addr, length, flags);
 #endif
 
   CANCEL_RESET (oldtype);
index 1d6cbb5170d0158f0db44594a4bb725d70d0dee8..91f111766afb3b83f3468db1d8fcef9b23d46213 100644 (file)
 int
 __nanosleep (const struct timespec *requested_time, struct timespec *remaining)
 {
-  int oldtype;
-  int result;
-
-  CANCEL_ASYNC (oldtype);
+  int oldtype = CANCEL_ASYNC ();
 
 #ifdef INLINE_SYSCALL
-  result = INLINE_SYSCALL (nanosleep, 2, requested_time, remaining);
+  int result = INLINE_SYSCALL (nanosleep, 2, requested_time, remaining);
 #else
-  result = __libc_nanosleep (requested_time, remaining);
+  int result = __libc_nanosleep (requested_time, remaining);
 #endif
 
   CANCEL_RESET (oldtype);
index 00e06b1956034b45b1ddfed22b466239d5e7504a..be790b8b90b5f1a876b93adad789091257cb339b 100644 (file)
 int
 __open (const char *pathname, int flags, ...)
 {
-  int oldtype;
-  int result;
   va_list ap;
 
   va_start (ap, flags);
 
-  CANCEL_ASYNC (oldtype);
+  int oldtype = CANCEL_ASYNC ();
 
 #ifdef INLINE_SYSCALL
-  result = INLINE_SYSCALL (open, 3, pathname, flags,
-                          va_arg (ap, __typeof ((mode_t) 0 + 0)));
+  int result = INLINE_SYSCALL (open, 3, pathname, flags,
+                              va_arg (ap, __typeof ((mode_t) 0 + 0)));
 #else
-  result = __libc_open (pathname, flags,
-                       va_arg (ap, __typeof ((mode_t) 0 + 0)));
+  int result = __libc_open (pathname, flags,
+                           va_arg (ap, __typeof ((mode_t) 0 + 0)));
 #endif
 
   CANCEL_RESET (oldtype);
index 25eec281f4bee5a25acc287d987abdd95ff1c3fa..27757f5ed413184b1efe6e6b54afaee166af18c5 100644 (file)
 int
 __open64 (const char *pathname, int flags, ...)
 {
-  int oldtype;
-  int result;
   va_list ap;
 
   va_start (ap, flags);
 
-  CANCEL_ASYNC (oldtype);
+  int oldtype = CANCEL_ASYNC ();
 
 #if defined INLINE_SYSCALL && defined O_LARGEFILE
-  result = INLINE_SYSCALL (open, 3, pathname, flags | O_LARGEFILE,
-                          va_arg (ap, __typeof ((mode_t) 0 + 0)));
+  int result = INLINE_SYSCALL (open, 3, pathname, flags | O_LARGEFILE,
+                              va_arg (ap, __typeof ((mode_t) 0 + 0)));
 #else
-  result = __libc_open64 (pathname, flags,
-                         va_arg (ap, __typeof ((mode_t) 0 + 0)));
+  int result = __libc_open64 (pathname, flags,
+                             va_arg (ap, __typeof ((mode_t) 0 + 0)));
 #endif
 
   CANCEL_RESET (oldtype);
index dbc625078964dacfed4594d389e6bedfc7044c0c..bb878f05006b62cd68f97c021911d0956b64751b 100644 (file)
 int
 pause (void)
 {
-  int oldtype;
-  int result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_pause ();
+  int result = __libc_pause ();
 
   CANCEL_RESET (oldtype);
 
index 65da7e643471f6433a2768bc591c2b6a3091f956..53b432bc7e4769e5aaf2f48c5f9e1a0033faa987 100644 (file)
 int
 poll (struct pollfd *fds, nfds_t nfds, int timeout)
 {
-  int result;
-  int oldtype;
-
-  CANCEL_ASYNC (oldtype);
+  int oldtype =CANCEL_ASYNC ();
 
 #ifdef INLINE_SYSCALL
-  result = INLINE_SYSCALL (poll, 3, fds, nfds, timeout);
+  int result = INLINE_SYSCALL (poll, 3, fds, nfds, timeout);
 #else
-  result = __poll (fds, nfds, timeout);
+  int result = __poll (fds, nfds, timeout);
 #endif
 
   CANCEL_RESET (oldtype);
index bcc7e0dc0c521cea0ac08ba4dfc6d1dcd5274490..6169ca85320c2cab25774f767f0a103d63cc2364 100644 (file)
 ssize_t
 pread (int fd, void *buf, size_t count, off_t offset)
 {
-  int oldtype;
-  ssize_t result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_pread (fd, buf, count, offset);
+  ssize_t result = __libc_pread (fd, buf, count, offset);
 
   CANCEL_RESET (oldtype);
 
index 1cf85f49b193b0bbf5d7070dda5971a2d44c09fe..a80e3e085290a605740a7afecc84db2315201759 100644 (file)
 ssize_t
 __pread64 (int fd, void *buf, size_t count, off64_t offset)
 {
-  int oldtype;
-  ssize_t result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_pread64 (fd, buf, count, offset);
+  ssize_t result = __libc_pread64 (fd, buf, count, offset);
 
   CANCEL_RESET (oldtype);
 
index e935a07ccd67e14143658ee47fc883645e98b632..542a1039258601c512a29a57aadf7b9188d5475e 100644 (file)
@@ -28,12 +28,10 @@ int
 pselect (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
         const struct timespec *timeout, const sigset_t *sigmask)
 {
-  int result;
-  int oldtype;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __pselect (nfds, readfds, writefds, exceptfds, timeout, sigmask);
+  int result = __pselect (nfds, readfds, writefds, exceptfds, timeout,
+                         sigmask);
 
   CANCEL_RESET (oldtype);
 
index 28910f60b7dc424fd26a7da1879ee93b9f67df5f..e3906a18681d04adef57cc836ea9f79cc3e25cf9 100644 (file)
 ssize_t
 pwrite (int fd, const void *buf, size_t count, off_t offset)
 {
-  int oldtype;
-  ssize_t result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_pwrite (fd, buf, count, offset);
+  ssize_t result = __libc_pwrite (fd, buf, count, offset);
 
   CANCEL_RESET (oldtype);
 
index abe4106182c8ae9fc9be2f8dcb8cda6375ae5bf6..18a9621220a448507be2f33bef8e46f417ad9bf1 100644 (file)
 ssize_t
 __pwrite64 (int fd, const void *buf, size_t count, off64_t offset)
 {
-  int oldtype;
-  ssize_t result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_pwrite64 (fd, buf, count, offset);
+  ssize_t result = __libc_pwrite64 (fd, buf, count, offset);
 
   CANCEL_RESET (oldtype);
 
index 8f31f0ceb44d297abde2ea1463e54d7e3b18dd2b..7eaafa0cd606a0a10351d7c3a7b350fdfc80e395 100644 (file)
 ssize_t
 __read (int fd, void *buf, size_t count)
 {
-  int oldtype;
-  ssize_t result;
-
-  CANCEL_ASYNC (oldtype);
+  int oldtype = CANCEL_ASYNC ();
 
 #ifdef INLINE_SYSCALL
-  result = INLINE_SYSCALL (read, 3, fd, buf, count);
+  ssize_t result = INLINE_SYSCALL (read, 3, fd, buf, count);
 #else
-  result = __libc_read (fd, buf, count);
+  ssize_t result = __libc_read (fd, buf, count);
 #endif
 
   CANCEL_RESET (oldtype);
index 9f6e653d4f2667833375ab96fcb3650f648cf1af..e81c8306a1b20754093ffae284844bfaba395a4e 100644 (file)
 #include "pthreadP.h"
 
 
-/* Not all versions of the kernel support the large number of records.  */
+/* Not all versions of the kernel support extremely the large number
+   of records.  */
 #ifndef UIO_FASTIOV
-# define UIO_FASTIOV   8       /* 8 is a safe number.  */
+/* 1024 is what the kernels with NPTL support use.  */
+# define UIO_FASTIOV   1024
 #endif
 
 
@@ -36,21 +38,29 @@ readv (fd, vector, count)
      const struct iovec *vector;
      int count;
 {
-  int oldtype;
-  ssize_t result;
-
-  CANCEL_ASYNC (oldtype);
+  int oldtype = CANCEL_ASYNC ();
 
+  ssize_t result;
 #ifdef INTERNAL_SYSCALL
   result = INTERNAL_SYSCALL (readv, 3, fd, vector, count);
-  if (INTERNAL_SYSCALL_ERROR_P (result)
-      && __builtin_expect (count > UIO_FASTIOV, 0))
-#elif defined INLINE_SYSCALL
+  if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (result), 0))
+    {
+      if (count <= UIO_FASTIOV)
+       {
+         __set_errno (INTERNAL_SYSCALL_ERRNO (result));
+         result = -1;
+       }
+      else
+       result = __libc_readv (fd, vector, count);
+    }
+#else
+# if defined INLINE_SYSCALL
   result = INLINE_SYSCALL (readv, 3, fd, vector, count);
   if (result < 0 && errno == EINVAL
       && __builtin_expect (count > UIO_FASTIOV, 0))
-#endif
+# endif
     result = __libc_readv (fd, vector, count);
+#endif
 
   CANCEL_RESET (oldtype);
 
index 0b9f7056a3980bc0a137979b7b149f043b6d4e74..12804478645eaf157440e7b678aec5d2bcdea665 100644 (file)
 ssize_t
 recv (int fd, __ptr_t buf, size_t n, int flags)
 {
-  int oldtype;
-  ssize_t result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_recv (fd, buf, n, flags);
+  ssize_t result = __libc_recv (fd, buf, n, flags);
 
   CANCEL_RESET (oldtype);
 
index 095b0b4b589632122f8e3da5105816ba52914a99..27d01952977b37785a46c0a890d615817a9bdab6 100644 (file)
@@ -28,12 +28,9 @@ ssize_t
 recvfrom (int fd, __ptr_t buf, size_t n, int flags, __SOCKADDR_ARG addr,
          socklen_t *addr_len)
 {
-  int oldtype;
-  ssize_t result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_recvfrom (fd, buf, n, flags, addr, addr_len);
+  ssize_t result = __libc_recvfrom (fd, buf, n, flags, addr, addr_len);
 
   CANCEL_RESET (oldtype);
 
index e5ceaaad0c873a35cc797988d976cf1bbd42aa71..e4f7dbfd3927088860e9b9153d04a55161628190 100644 (file)
 ssize_t
 recvmsg (int fd, struct msghdr *message, int flags)
 {
-  int oldtype;
-  ssize_t result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_recvmsg (fd, message, flags);
+  ssize_t result = __libc_recvmsg (fd, message, flags);
 
   CANCEL_RESET (oldtype);
 
index 03e10cd08ef086437d7c191f0b6691acf79b4c3a..cb795c5936f910647e41a1f9438f94a0ea596bf3 100644 (file)
@@ -28,16 +28,13 @@ int
 select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
        struct timeval *timeout)
 {
-  int result;
-  int oldtype;
-
-  CANCEL_ASYNC (oldtype);
+  int oldtype = CANCEL_ASYNC ();
 
 #if defined INLINE_SYSCALL && defined __NR__newselect
-  result = INLINE_SYSCALL (_newselect, 5, nfds, readfds, writefds, exceptfds,
-                          timeout);
+  int result = INLINE_SYSCALL (_newselect, 5, nfds, readfds, writefds,
+                              exceptfds, timeout);
 #else
-  result = __select (nfds, readfds, writefds, exceptfds, timeout);
+  int result = __select (nfds, readfds, writefds, exceptfds, timeout);
 #endif
 
   CANCEL_RESET (oldtype);
index 90221adc24e4645bb2902a4aca7eb61ce62c76ed..5af725e36fb511df00d3b3370fcdf5b95faf617c 100644 (file)
 ssize_t
 __send (int fd, const __ptr_t buf, size_t n, int flags)
 {
-  int oldtype;
-  ssize_t result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_send (fd, buf, n, flags);
+  ssize_t result = __libc_send (fd, buf, n, flags);
 
   CANCEL_RESET (oldtype);
 
index 5b4d8b93cc358ea6d0e25730c83c276aba181546..8017f0d402b6062ad5c60bc50b1f3d63272ff997 100644 (file)
 ssize_t
 sendmsg (int fd, const struct msghdr *message, int flags)
 {
-  int oldtype;
-  ssize_t result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_sendmsg (fd, message, flags);
+  ssize_t result = __libc_sendmsg (fd, message, flags);
 
   CANCEL_RESET (oldtype);
 
index 6a81e61df2650151c30affe79148b91a9fbc2a8a..1123bc41cb09f63b39a8b246db97bf55754b4b65 100644 (file)
@@ -28,12 +28,9 @@ ssize_t
 sendto (int fd, const __ptr_t buf, size_t n, int flags,
        __CONST_SOCKADDR_ARG addr, socklen_t addr_len)
 {
-  int oldtype;
-  ssize_t result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_sendto (fd, buf, n, flags, addr, addr_len);
+  ssize_t result = __libc_sendto (fd, buf, n, flags, addr, addr_len);
 
   CANCEL_RESET (oldtype);
 
index ad78662839e68aa6f777bfbd0945d4e027830299..e35026bdf48018498e106d10574643329970a539 100644 (file)
 int
 sigpause (int mask)
 {
-  int oldtype;
-  int result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
+  int result = __sigpause (mask, 0);
 
-  result = sigpause (mask);
+  CANCEL_RESET (oldtype);
+
+  return result;
+}
+
+
+int
+__xpg_sigpause (int sig)
+{
+  int oldtype = CANCEL_ASYNC ();
+
+  int result = __sigpause (sig, 1);
 
   CANCEL_RESET (oldtype);
 
index d345b5dc5020c40b29a059e4b5a5e2afa89c2e49..e531a5b45c46f21a110be8f4b1df5b1fb40d5ae9 100644 (file)
 int
 sigsuspend (const sigset_t *set)
 {
-  int result;
-  int oldtype;
-
-  CANCEL_ASYNC (oldtype);
+  int oldtype = CANCEL_ASYNC ();
 
 #ifdef INLINE_SYSCALL
-  result = INLINE_SYSCALL (rt_sigsuspend, 2, set, _NSIG / 8);
+  int result = INLINE_SYSCALL (rt_sigsuspend, 2, set, _NSIG / 8);
 #else
-  result = __sigsuspend (set);
+  int result = __sigsuspend (set);
 #endif
 
   CANCEL_RESET (oldtype);
index c2940f397eb0ea813c8e3c707338526c93dfb0d3..f2a00d4c888fbbb4967a0f7c4a5b412e5499d07f 100644 (file)
@@ -28,15 +28,13 @@ int
 sigtimedwait (const sigset_t *set, siginfo_t *info,
              const struct timespec *timeout)
 {
-  int result;
-  int oldtype;
-
-  CANCEL_ASYNC (oldtype);
+  int oldtype = CANCEL_ASYNC ();
 
 #ifdef INLINE_SYSCALL
-  result = INLINE_SYSCALL (rt_sigtimedwait, 4, set, info, timeout, _NSIG / 8);
+  int result = INLINE_SYSCALL (rt_sigtimedwait, 4, set, info, timeout,
+                              _NSIG / 8);
 #else
-  result = __sigtimedwait (set, info, timeout);
+  int result = __sigtimedwait (set, info, timeout);
 #endif
 
   CANCEL_RESET (oldtype);
index efd05ed7d9ad7ceb26401d6b5b6e3de0eb645b01..88dca893b87f0d39389a67143dcbf5347c023bf5 100644 (file)
 int
 sigwait (const sigset_t *set, int *sig)
 {
-  int result;
-  int oldtype;
-
-  CANCEL_ASYNC (oldtype);
+  int oldtype = CANCEL_ASYNC ();
 
 #ifdef INTERNAL_SYSCALL
-  result = INTERNAL_SYSCALL (rt_sigtimedwait, 4, set, NULL, NULL, _NSIG / 8);
+  int result = INTERNAL_SYSCALL (rt_sigtimedwait, 4, set, NULL, NULL,
+                                _NSIG / 8);
   if (! INTERNAL_SYSCALL_ERROR_P (result))
     {
       *sig = result;
@@ -42,7 +40,7 @@ sigwait (const sigset_t *set, int *sig)
   else
     result = INTERNAL_SYSCALL_ERRNO (result);
 #elif defined INLINE_SYSCALL
-  result = INLINE_SYSCALL (rt_sigtimedwait, 4, set, NULL, NULL, _NSIG / 8);
+  int result = INLINE_SYSCALL (rt_sigtimedwait, 4, set, NULL, NULL, _NSIG / 8);
   if (result != -1)
     {
       *sig = result;
@@ -51,7 +49,7 @@ sigwait (const sigset_t *set, int *sig)
   else
     result = errno;
 #else
-  result = __sigwait (set, sig);
+  int result = __sigwait (set, sig);
 #endif
 
   CANCEL_RESET (oldtype);
index 961293b06c5f15c20df9c63288a2901c665ec9a9..49f402df1728742e7e1972b68642297c201fba0a 100644 (file)
 int
 sigwaitinfo (const sigset_t *set, siginfo_t *info)
 {
-  int result;
-  int oldtype;
-
-  CANCEL_ASYNC (oldtype);
+  int oldtype = CANCEL_ASYNC ();
 
 #ifdef INLINE_SYSCALL
-  result = INLINE_SYSCALL (rt_sigtimedwait, 4, set, info, NULL, _NSIG / 8);
+  int result = INLINE_SYSCALL (rt_sigtimedwait, 4, set, info, NULL, _NSIG / 8);
 #else
-  result = __sigwaitinfo (set, info);
+  int result = __sigwaitinfo (set, info);
 #endif
 
   CANCEL_RESET (oldtype);
index 2572c477c851d51100b9162ec314510b6543fa99..d02f451893b57ff8fa57111990745a7c65232f05 100644 (file)
 int
 system (const char *line)
 {
-  int oldtype;
-  int result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_system (line);
+  int result = __libc_system (line);
 
   CANCEL_RESET (oldtype);
 
index 65af7b809246cd9bad724e369b1fa3f501726594..ba1c4b77b4af054e364a04b361323bd78d4147eb 100644 (file)
 int
 tcdrain (int fd)
 {
-  int oldtype;
-  int result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_tcdrain (fd);
+  int result = __libc_tcdrain (fd);
 
   CANCEL_RESET (oldtype);
 
index 951bba6b443beaec7ae320135d685922b2c422ce..fa25f21343af0f5a7d52e59873c3d4c3a2fd3ff7 100644 (file)
 pid_t
 __wait (__WAIT_STATUS_DEFN stat_loc)
 {
-  int oldtype;
-  pid_t result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_wait (stat_loc);
+  pid_t result = __libc_wait (stat_loc);
 
   CANCEL_RESET (oldtype);
 
index 977e5d4b771c4b1835665889aa50fe78f8db3530..ee8633cf49ba243c02be2130035a7d5c299f2b8f 100644 (file)
 int
 waitid (idtype_t idtype, id_t id, siginfo_t *infop, int options)
 {
-  int oldtype;
-  int result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __waitid (idtype, id, infop, options);
+  int result = __waitid (idtype, id, infop, options);
 
   CANCEL_RESET (oldtype);
 
index 413328bea990c9bda5346f74cff44a0335eb2581..86fa30c4b424ac8397871e0ca985145f14d4a490 100644 (file)
 pid_t
 waitpid (pid_t pid, int *stat_loc, int options)
 {
-  int oldtype;
-  pid_t result;
+  int oldtype = CANCEL_ASYNC ();
 
-  CANCEL_ASYNC (oldtype);
-
-  result = __libc_waitpid (pid, stat_loc, options);
+  pid_t result = __libc_waitpid (pid, stat_loc, options);
 
   CANCEL_RESET (oldtype);
 
index 190bea90ae97c8d3765ee62db7dab03436c41db7..c8856e08356604ea9a4c1f5704f9868a08308cd3 100644 (file)
 ssize_t
 __write (int fd, const void *buf, size_t count)
 {
-  int oldtype;
-  ssize_t result;
-
-  CANCEL_ASYNC (oldtype);
+  int oldtype = CANCEL_ASYNC ();
 
 #ifdef INLINE_SYSCALL
-  result = INLINE_SYSCALL (write, 3, fd, buf, count);
+  ssize_t result = INLINE_SYSCALL (write, 3, fd, buf, count);
 #else
-  result = __libc_write (fd, buf, count);
+  ssize_t result = __libc_write (fd, buf, count);
 #endif
 
   CANCEL_RESET (oldtype);
index c1dda350aa39c1ae70384acdaf90434eeafea493..99e876c902fed950e3e0348d2ded37ab7a9aceef 100644 (file)
@@ -26,7 +26,8 @@
 
 /* Not all versions of the kernel support the large number of records.  */
 #ifndef UIO_FASTIOV
-# define UIO_FASTIOV   8       /* 8 is a safe number.  */
+/* 1024 is what the kernels with NPTL support use.  */
+# define UIO_FASTIOV   1024
 #endif
 
 
@@ -36,21 +37,29 @@ writev (fd, vector, count)
      const struct iovec *vector;
      int count;
 {
-  int oldtype;
-  ssize_t result;
-
-  CANCEL_ASYNC (oldtype);
+  int oldtype = CANCEL_ASYNC ();
 
+  ssize_t result;
 #ifdef INTERNAL_SYSCALL
   result = INTERNAL_SYSCALL (writev, 3, fd, vector, count);
-  if (INTERNAL_SYSCALL_ERROR_P (result)
-      && __builtin_expect (count > UIO_FASTIOV, 0))
-#elif defined INLINE_SYSCALL
+  if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (result), 0))
+    {
+      if (count <= UIO_FASTIOV)
+       {
+         __set_errno (INTERNAL_SYSCALL_ERRNO (result));
+         result = -1;
+       }
+      else
+       result = __libc_writev (fd, vector, count);
+    }
+#else
+# if defined INLINE_SYSCALL
   result = INLINE_SYSCALL (writev, 3, fd, vector, count);
   if (result < 0 && errno == EINVAL
       && __builtin_expect (count > UIO_FASTIOV, 0))
-#endif
+# endif
     result = __libc_writev (fd, vector, count);
+#endif
 
   CANCEL_RESET (oldtype);
 
index 74243d1382ea0edc82ba53592175d665d47cb76a..c90b782722ebfd451ead87463a7fa5d92c95f3f2 100644 (file)
@@ -79,11 +79,11 @@ extern int __pthread_debug attribute_hidden;
   } while (0)
 
 /* Set cancellation mode to asynchronous.  */
-#define CANCEL_ASYNC(oldtype) \
-  __pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype)
+#define CANCEL_ASYNC() \
+  __pthread_enable_asynccancel ()
 /* Reset to previous cancellation mode.  */
 #define CANCEL_RESET(oldtype) \
-  __pthread_setcanceltype (oldtype, NULL)
+  __pthread_disable_asynccancel (oldtype)
 
 /* Function performing the cancellation.  */
 extern void __do_cancel (char *currentframe)
@@ -187,6 +187,8 @@ extern int __pthread_atfork (void (*prepare) (void), void (*parent) (void),
                             void (*child) (void));
 extern int __pthread_kill (pthread_t threadid, int signo);
 extern int __pthread_setcanceltype (int type, int *oldtype);
+extern int __pthread_enable_asynccancel (void) attribute_hidden;
+extern void __pthread_disable_asynccancel (int oldtype) attribute_hidden;
 
 /* Special versions which use non-exported functions.  */
 extern void _GI_pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
index 87440f6932bb3be0beed4a01916bcd454c959d44..92288df8be1ba58cae321545bc3a82725352daab 100644 (file)
@@ -33,7 +33,7 @@ sem_unlink (name)
   size_t namelen;
 
   /* Determine where the shmfs is mounted.  */
-  INTDEF(__pthread_once) (&__namedsem_once, __where_is_shmfs);
+  INTUSE(__pthread_once) (&__namedsem_once, __where_is_shmfs);
 
   /* If we don't know the mount points there is nothing we can do.  Ever.  */
   if (mountpoint.dir == NULL)
index f083a0911c8e7a3acf015d520f42c19f00136097..61e658a1523c43615abc7c0357cef276de29448f 100644 (file)
@@ -18,7 +18,7 @@ G
 s/\n//
 s/^\([^,]*\),\([^,]*\),B/OUTPUT_FORMAT(\1)/p
 s/^\([^,]*\),\([^,]*\),L/OUTPUT_FORMAT(\2)/p
-/,/s/^/*** BUG in libc/scripts/output-format.sed *** /p
+/,/s|^|*** BUG in libc/scripts/output-format.sed *** |p
 q
 : q
 s/"//g
This page took 0.102072 seconds and 5 git commands to generate.