]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Update.
authorUlrich Drepper <drepper@redhat.com>
Tue, 31 Jul 2001 20:32:01 +0000 (20:32 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 31 Jul 2001 20:32:01 +0000 (20:32 +0000)
* sysdeps/unix/sysv/linux/cmsg_nxthdr.c (__cmsg_nxthdr): Correct
test for cmsg struct size.
* sysdeps/unix/sysv/linux/bits/socket.h (__cmsg_nxthdr): Likewise.

* sysdeps/unix/sysv/linux/i386/makecontext.S: Remove unnecessary
initializations.

* libio/oldiopopen.c: Add lock for old_proc_file_chain access.

ChangeLog
libio/oldiopopen.c
linuxthreads/ChangeLog
linuxthreads/Examples/ex17.c
linuxthreads/tst-context.c
sysdeps/unix/sysv/linux/bits/socket.h
sysdeps/unix/sysv/linux/cmsg_nxthdr.c
sysdeps/unix/sysv/linux/i386/makecontext.S

index 695637fabc7b36d9fbda5e5a4f50efb35e9c58fe..bca582b88704afd9947e839da42b209d425c6533 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,14 @@
 2001-07-31  Ulrich Drepper  <drepper@redhat.com>
 
+       * sysdeps/unix/sysv/linux/cmsg_nxthdr.c (__cmsg_nxthdr): Correct
+       test for cmsg struct size.
+       * sysdeps/unix/sysv/linux/bits/socket.h (__cmsg_nxthdr): Likewise.
+
+       * sysdeps/unix/sysv/linux/i386/makecontext.S: Remove unnecessary
+       initializations.
+
        * libio/iopopen.c: Add lock for proc_file_chain access.
+       * libio/oldiopopen.c: Add lock for old_proc_file_chain access.
        Reported by Padraig Brady <Padraig@linux.ie>.
 
 2001-07-31  Andreas Jaeger  <aj@suse.de>
index ed4e3d241b3673e18f73040461faf957ea76edbb..d18a2a433864c6ac11faac039cc67d5907d64b9f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998,99,2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Per Bothner <bothner@cygnus.com>.
 
@@ -109,6 +109,16 @@ typedef struct _IO_proc_file _IO_proc_file;
 
 static struct _IO_proc_file *old_proc_file_chain;
 
+#ifdef _IO_MTSAFE_IO
+static _IO_lock_t proc_file_chain_lock = _IO_lock_initializer;
+
+static void
+unlock (void *not_used)
+{
+  _IO_lock_unlock (proc_file_chain_lock);
+}
+#endif
+
 _IO_FILE *
 _IO_old_proc_open (fp, command, mode)
      _IO_FILE *fp;
@@ -173,8 +183,16 @@ _IO_old_proc_open (fp, command, mode)
   _IO_fileno (fp) = parent_end;
 
   /* Link into old_proc_file_chain. */
+#ifdef _IO_MTSFE_IO
+  _IO_cleanup_region_start_noarg (unlock);
+  _IO_lock_lock (proc_file_chain_lock);
+#endif
   ((_IO_proc_file *) fp)->next = old_proc_file_chain;
   old_proc_file_chain = (_IO_proc_file *) fp;
+#ifdef _IO_MTSFE_IO
+  _IO_lock_unlock (proc_file_chain_lock);
+  _IO_cleanup_region_end (0);
+#endif
 
   _IO_mask_flags (fp, read_or_write, _IO_NO_READS|_IO_NO_WRITES);
   return fp;
@@ -229,6 +247,10 @@ _IO_old_proc_close (fp)
   int status = -1;
 
   /* Unlink from old_proc_file_chain. */
+#ifdef _IO_MTSFE_IO
+  _IO_cleanup_region_start_noarg (unlock);
+  _IO_lock_lock (proc_file_chain_lock);
+#endif
   for ( ; *ptr != NULL; ptr = &(*ptr)->next)
     {
       if (*ptr == (_IO_proc_file *) fp)
@@ -238,6 +260,10 @@ _IO_old_proc_close (fp)
          break;
        }
     }
+#ifdef _IO_MTSFE_IO
+  _IO_lock_unlock (proc_file_chain_lock);
+  _IO_cleanup_region_end (0);
+#endif
 
   if (status < 0 || _IO_close (_IO_fileno(fp)) < 0)
     return -1;
index d38b8a7cf976236cebd0fb4fe63f7d1626be65cf..b4c51749ef2399fe4bbc81e98c5009c0efbd68ea 100644 (file)
@@ -1,3 +1,7 @@
+2001-07-31  Ulrich Drepper  <drepper@redhat.com>
+
+       * Examples/ex17.c: Make sure test thread is around long enough.
+
 2001-07-26  kaz Kojima  <kkojima@rr.iij4u.or.jp>
 
        * sysdeps/sh/pt-machine.h (THREAD_SELF, INIT_THREAD_SELF): Defined.
index f5c99ee3fb5fdcba0ddc4b71d559024c27baa351..a3ab90999043fb6b498150de403ddfbd68123fcf 100644 (file)
@@ -6,9 +6,12 @@
 #include <limits.h>
 #include <sys/mman.h>
 
+static pthread_mutex_t synch = PTHREAD_MUTEX_INITIALIZER;
+
 static void *
 test_thread (void *v_param)
 {
+  pthread_mutex_lock (&synch);
   return NULL;
 }
 
@@ -56,6 +59,13 @@ main (void)
       return 2;
     }
 
+  status = pthread_mutex_lock (&synch);
+  if (status != 0)
+    {
+      printf ("cannot get lock: %s\n", strerror (status));
+      return 1;
+    }
+
   status = pthread_create (&thread, &attr, test_thread, NULL);
   if (status != 0)
     {
@@ -85,6 +95,13 @@ main (void)
       return 3;
     }
 
+  status = pthread_mutex_unlock (&synch);
+  if (status != 0)
+    {
+      printf ("cannot release lock: %s\n", strerror (status));
+      return 1;
+    }
+
   /* pthread_detach (thread); */
   if (pthread_join (thread, NULL) != 0)
     {
index 82a877cffea804149e05a7fe92de563f194b6846..c72b2ac101676d8ca7fa1c872f2b467b108f4482 100644 (file)
@@ -28,6 +28,12 @@ threadfct (void *arg)
 {
   int n = (int) (long int) arg;
 
+  if (getcontext (&ctx[n][1]) != 0)
+    {
+      printf ("%d: cannot get context: %m\n", n);
+      exit (1);
+    }
+
   printf ("%d: %s: before makecontext\n", n, __FUNCTION__);
 
   ctx[n][1].uc_stack.ss_sp = stacks[n];
index 0ec83ccff26c62a2e50dfc699791c74239c78dc9..6ad4a5ed92712d82b9592804359e373618c535a3 100644 (file)
@@ -268,8 +268,8 @@ __cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg) __THROW
 
   __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
                               + CMSG_ALIGN (__cmsg->cmsg_len));
-  if ((unsigned char *) (__cmsg + 1) >= ((unsigned char *) __mhdr->msg_control
-                                        + __mhdr->msg_controllen)
+  if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control
+                                       + __mhdr->msg_controllen)
       || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len)
          > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)))
     /* No more entries.  */
index 22daab5ee3a2d7940474b2739a909bb4ef5667cb..b7de285e34a9444f915585c0835b6d6d7702f9f5 100644 (file)
@@ -29,8 +29,8 @@ __cmsg_nxthdr (struct msghdr *mhdr, struct cmsghdr *cmsg)
 
   cmsg = (struct cmsghdr *) ((unsigned char *) cmsg
                             + CMSG_ALIGN (cmsg->cmsg_len));
-  if ((unsigned char *) (cmsg + 1) >= ((unsigned char *) mhdr->msg_control
-                                      + mhdr->msg_controllen)
+  if ((unsigned char *) (cmsg + 1) > ((unsigned char *) mhdr->msg_control
+                                     + mhdr->msg_controllen)
       || ((unsigned char *) cmsg + CMSG_ALIGN (cmsg->cmsg_len)
          > ((unsigned char *) mhdr->msg_control + mhdr->msg_controllen)))
     /* No more entries.  */
index 1ca323394555f164c9fe16e3fb25b0170a2ce076..56b5537ce3abe0e7bed62d7af7a08eaa19d4f2c8 100644 (file)
@@ -40,22 +40,6 @@ ENTRY(__makecontext)
        movl    oLINK(%eax), %ecx
        movl    %ecx, -4(%edx)
 
-       /* Copy the FS and GS segment register.  */
-       xorl    %ecx, %ecx
-       movw    %gs, %cx
-       movl    %ecx, oGS(%eax)
-       xorl    %ecx, %ecx
-       movw    %fs, %cx
-       movl    %ecx, oFS(%eax)
-
-       /* We have separate floating-point register content memory on the
-          stack.  We use the __fpregs_mem block in the context.  Set the
-          links up correctly.  */
-       leal    oFPREGSMEM(%eax), %ecx
-       movl    %ecx, oFPREGS(%eax)
-       /* Save the floating-point context.  */
-       fnstenv (%ecx)
-
        /* Remember the number of parameters for the exit handler since
           it has to remove them.  We store the number in the EBX register
           which the function we will call must preserve.  */