]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - nptl/tst-cond4.c
Prefer https to http for gnu.org and fsf.org URLs
[thirdparty/glibc.git] / nptl / tst-cond4.c
index 6b57fbc7eeda110429c7432c83f6c6560a0c9885..dc3c03dbe3ac133da3dca630f5f5dc3af75bb25b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2019 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
 
 #include <errno.h>
 #include <pthread.h>
+#include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -29,9 +29,8 @@
 
 int *condition;
 
-
-int
-main (void)
+static int
+do_test (void)
 {
   size_t ps = sysconf (_SC_PAGESIZE);
   char tmpfname[] = "/tmp/tst-cond4.XXXXXX";
@@ -51,7 +50,7 @@ main (void)
   if (fd == -1)
     {
       printf ("cannot open temporary file: %m\n");
-      exit (1);
+      return 1;
     }
 
   /* Make sure it is always removed.  */
@@ -61,17 +60,17 @@ main (void)
   memset (data, '\0', ps);
 
   /* Write the data to the file.  */
-  if (write (fd, data, ps) != ps)
+  if (write (fd, data, ps) != (ssize_t) ps)
     {
       puts ("short write");
-      exit (1);
+      return 1;
     }
 
   mem = mmap (NULL, ps, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
   if (mem == MAP_FAILED)
     {
       printf ("mmap failed: %m\n");
-      exit (1);
+      return 1;
     }
 
   mut1 = (pthread_mutex_t *) (((uintptr_t) mem
@@ -89,97 +88,97 @@ main (void)
   if (pthread_mutexattr_init (&ma) != 0)
     {
       puts ("mutexattr_init failed");
-      exit (1);
+      return 1;
     }
 
   if (pthread_mutexattr_getpshared (&ma, &p) != 0)
     {
       puts ("1st mutexattr_getpshared failed");
-      exit (1);
+      return 1;
     }
 
   if (p != PTHREAD_PROCESS_PRIVATE)
     {
       puts ("default pshared value wrong");
-      exit (1);
+      return 1;
     }
 
   if (pthread_mutexattr_setpshared (&ma, PTHREAD_PROCESS_SHARED) != 0)
     {
       puts ("mutexattr_setpshared failed");
-      exit (1);
+      return 1;
     }
 
   if (pthread_mutexattr_getpshared (&ma, &p) != 0)
     {
       puts ("2nd mutexattr_getpshared failed");
-      exit (1);
+      return 1;
     }
 
   if (p != PTHREAD_PROCESS_SHARED)
     {
       puts ("pshared value after setpshared call wrong");
-      exit (1);
+      return 1;
     }
 
   if (pthread_mutex_init (mut1, &ma) != 0)
     {
       puts ("1st mutex_init failed");
-      exit (1);
+      return 1;
     }
 
   if (pthread_mutex_init (mut2, &ma) != 0)
     {
       puts ("2nd mutex_init failed");
-      exit (1);
+      return 1;
     }
 
   if (pthread_condattr_init (&ca) != 0)
     {
       puts ("condattr_init failed");
-      exit (1);
+      return 1;
     }
 
   if (pthread_condattr_getpshared (&ca, &p) != 0)
     {
       puts ("1st condattr_getpshared failed");
-      exit (1);
+      return 1;
     }
 
   if (p != PTHREAD_PROCESS_PRIVATE)
     {
       puts ("default value for pshared in condattr wrong");
-      exit (1);
+      return 1;
     }
 
   if (pthread_condattr_setpshared (&ca, PTHREAD_PROCESS_SHARED) != 0)
     {
       puts ("condattr_setpshared failed");
-      exit (1);
+      return 1;
     }
 
   if (pthread_condattr_getpshared (&ca, &p) != 0)
     {
       puts ("2nd condattr_getpshared failed");
-      exit (1);
+      return 1;
     }
 
   if (p != PTHREAD_PROCESS_SHARED)
     {
       puts ("pshared condattr still not set");
-      exit (1);
+      return 1;
     }
 
   if (pthread_cond_init (cond, &ca) != 0)
     {
       puts ("cond_init failed");
-      exit (1);
+      return 1;
     }
 
   if (pthread_mutex_lock (mut1) != 0)
     {
       puts ("parent: 1st mutex_lock failed");
-      exit (1);
+      return 1;
     }
 
   puts ("going to fork now");
@@ -187,34 +186,34 @@ main (void)
   if (pid == -1)
     {
       puts ("fork failed");
-      exit (1);
+      return 1;
     }
   else if (pid == 0)
     {
       if (pthread_mutex_lock (mut2) != 0)
        {
          puts ("child: mutex_lock failed");
-         exit (1);
+         return 1;
        }
 
       if (pthread_mutex_unlock (mut1) != 0)
        {
          puts ("child: 1st mutex_unlock failed");
-         exit (1);
+         return 1;
        }
 
       do
        if (pthread_cond_wait (cond, mut2) != 0)
          {
            puts ("child: cond_wait failed");
-           exit (1);
+           return 1;
          }
       while (*condition == 0);
 
       if (pthread_mutex_unlock (mut2) != 0)
        {
          puts ("child: 2nd mutex_unlock failed");
-         exit (1);
+         return 1;
        }
 
       puts ("child done");
@@ -226,19 +225,19 @@ main (void)
       if (pthread_mutex_lock (mut1) != 0)
        {
          puts ("parent: 2nd mutex_lock failed");
-         exit (1);
+         return 1;
        }
 
       if (pthread_mutex_lock (mut2) != 0)
        {
          puts ("parent: 3rd mutex_lock failed");
-         exit (1);
+         return 1;
        }
 
       if (pthread_cond_signal (cond) != 0)
        {
          puts ("parent: cond_signal failed");
-         exit (1);
+         return 1;
        }
 
       *condition = 1;
@@ -246,7 +245,7 @@ main (void)
       if (pthread_mutex_unlock (mut2) != 0)
        {
          puts ("parent: mutex_unlock failed");
-         exit (1);
+         return 1;
        }
 
       puts ("waiting for child");
@@ -259,3 +258,6 @@ main (void)
 
  return result;
 }
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"