about summary refs log tree commit diff
path: root/nptl
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2020-02-09 23:14:35 +0000
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2020-02-10 01:03:55 +0000
commit6acd77229adda7e772bf5783145500f6cd074fd3 (patch)
tree46d03d0aec8858ee9de87f6a16c46348dbcb2563 /nptl
parentf3a7ff069f74e4d6a89aba5fb9bba74f38d249c7 (diff)
downloadglibc-6acd77229adda7e772bf5783145500f6cd074fd3.tar.gz
glibc-6acd77229adda7e772bf5783145500f6cd074fd3.tar.xz
glibc-6acd77229adda7e772bf5783145500f6cd074fd3.zip
pthread: Move most barrier tests from nptl to sysdeps/pthread
So they can be checked with htl too.
Diffstat (limited to 'nptl')
-rw-r--r--nptl/Makefile1
-rw-r--r--nptl/tst-barrier1.c71
-rw-r--r--nptl/tst-barrier2.c185
-rw-r--r--nptl/tst-barrier3.c152
-rw-r--r--nptl/tst-barrier4.c121
5 files changed, 0 insertions, 530 deletions
diff --git a/nptl/Makefile b/nptl/Makefile
index 80e293209c..a72022a052 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -250,7 +250,6 @@ tests = tst-attr2 tst-attr3 tst-default-attr \
 	tst-rwlock14 tst-rwlock15 tst-rwlock17 tst-rwlock18 \
 	tst-once5 \
 	tst-sem5 tst-sem17 \
-	tst-barrier1 tst-barrier2 tst-barrier3 tst-barrier4 \
 	tst-align tst-align3 \
 	tst-kill1 tst-kill2 tst-kill3 tst-kill4 tst-kill5 tst-kill6 \
 	tst-raise1 \
diff --git a/nptl/tst-barrier1.c b/nptl/tst-barrier1.c
deleted file mode 100644
index d60f22f63d..0000000000
--- a/nptl/tst-barrier1.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Tests barrier initialization.
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   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, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-
-
-static int
-do_test (void)
-{
-  pthread_barrier_t b;
-  int e;
-  int cnt;
-
-  e = pthread_barrier_init (&b, NULL, 0);
-  if (e == 0)
-    {
-      puts ("barrier_init with count 0 succeeded");
-      return 1;
-    }
-  if (e != EINVAL)
-    {
-      puts ("barrier_init with count 0 didn't return EINVAL");
-      return 1;
-    }
-
-  if (pthread_barrier_init (&b, NULL, 1) != 0)
-    {
-      puts ("real barrier_init failed");
-      return 1;
-    }
-
-  for (cnt = 0; cnt < 10; ++cnt)
-    {
-      e = pthread_barrier_wait (&b);
-
-      if (e != PTHREAD_BARRIER_SERIAL_THREAD)
-	{
-	  puts ("barrier_wait didn't return PTHREAD_BARRIER_SERIAL_THREAD");
-	  return 1;
-	}
-    }
-
-  if (pthread_barrier_destroy (&b) != 0)
-    {
-      puts ("barrier_destroy failed");
-      return 1;
-    }
-
-  return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/nptl/tst-barrier2.c b/nptl/tst-barrier2.c
deleted file mode 100644
index d32c632ae0..0000000000
--- a/nptl/tst-barrier2.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/* Tests process-shared barriers.
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   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, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-
-
-static int
-do_test (void)
-{
-  size_t ps = sysconf (_SC_PAGESIZE);
-  char tmpfname[] = "/tmp/tst-barrier2.XXXXXX";
-  char data[ps];
-  void *mem;
-  int fd;
-  pthread_barrier_t *b;
-  pthread_barrierattr_t a;
-  pid_t pid;
-  int serials = 0;
-  int cnt;
-  int status;
-  int p;
-
-  fd = mkstemp (tmpfname);
-  if (fd == -1)
-    {
-      printf ("cannot open temporary file: %m\n");
-      return 1;
-    }
-
-  /* Make sure it is always removed.  */
-  unlink (tmpfname);
-
-  /* Create one page of data.  */
-  memset (data, '\0', ps);
-
-  /* Write the data to the file.  */
-  if (write (fd, data, ps) != (ssize_t) ps)
-    {
-      puts ("short write");
-      return 1;
-    }
-
-  mem = mmap (NULL, ps, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
-  if (mem == MAP_FAILED)
-    {
-      printf ("mmap failed: %m\n");
-      return 1;
-    }
-
-  b = (pthread_barrier_t *) (((uintptr_t) mem + __alignof (pthread_barrier_t))
-			     & ~(__alignof (pthread_barrier_t) - 1));
-
-  if (pthread_barrierattr_init (&a) != 0)
-    {
-      puts ("barrierattr_init failed");
-      return 1;
-    }
-
-  if (pthread_barrierattr_getpshared (&a, &p) != 0)
-    {
-      puts ("1st barrierattr_getpshared failed");
-      return 1;
-    }
-
-  if (p != PTHREAD_PROCESS_PRIVATE)
-    {
-      puts ("default pshared value wrong");
-      return 1;
-    }
-
-  if (pthread_barrierattr_setpshared (&a, PTHREAD_PROCESS_SHARED) != 0)
-    {
-      puts ("barrierattr_setpshared failed");
-      return 1;
-    }
-
-  if (pthread_barrierattr_getpshared (&a, &p) != 0)
-    {
-      puts ("2nd barrierattr_getpshared failed");
-      return 1;
-    }
-
-  if (p != PTHREAD_PROCESS_SHARED)
-    {
-      puts ("pshared value after setpshared call wrong");
-      return 1;
-    }
-
-  if (pthread_barrier_init (b, &a, 2) != 0)
-    {
-      puts ("barrier_init failed");
-      return 1;
-    }
-
-  if (pthread_barrierattr_destroy (&a) != 0)
-    {
-      puts ("barrierattr_destroy failed");
-      return 1;
-    }
-
-  puts ("going to fork now");
-  pid = fork ();
-  if (pid == -1)
-    {
-      puts ("fork failed");
-      return 1;
-    }
-
-  /* Just to be sure we don't hang forever.  */
-  alarm (4);
-
-#define N 30
-  for (cnt = 0; cnt < N; ++cnt)
-    {
-      int e;
-
-      e = pthread_barrier_wait (b);
-      if (e == PTHREAD_BARRIER_SERIAL_THREAD)
-	++serials;
-      else if (e != 0)
-	{
-	  printf ("%s: barrier_wait returned value %d != 0 and PTHREAD_BARRIER_SERIAL_THREAD\n",
-		  pid == 0 ? "child" : "parent", e);
-	  return 1;
-	}
-    }
-
-  alarm (0);
-
-  printf ("%s: was %d times the serial thread\n",
-	  pid == 0 ? "child" : "parent", serials);
-
-  if (pid == 0)
-    /* The child.  Pass the number of times we had the serializing
-       thread back to the parent.  */
-    exit (serials);
-
-  if (waitpid (pid, &status, 0) != pid)
-    {
-      puts ("waitpid failed");
-      return 1;
-    }
-
-  if (!WIFEXITED (status))
-    {
-      puts ("child exited abnormally");
-      return 1;
-    }
-
-  if (WEXITSTATUS (status) + serials != N)
-    {
-      printf ("total number of serials is %d, expected %d\n",
-	      WEXITSTATUS (status) + serials, N);
-      return 1;
-    }
-
-  return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/nptl/tst-barrier3.c b/nptl/tst-barrier3.c
deleted file mode 100644
index 3e3066f352..0000000000
--- a/nptl/tst-barrier3.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/* Test of POSIX barriers.
-   Copyright (C) 2002-2020 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   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, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define NTHREADS 20
-
-#define ROUNDS 20
-
-static pthread_barrier_t barriers[NTHREADS];
-
-static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
-static int counters[NTHREADS];
-static int serial[NTHREADS];
-
-static void *
-worker (void *arg)
-{
-  void *result = NULL;
-  int nr = (long int) arg;
-  int i;
-
-  for (i = 0; i < ROUNDS; ++i)
-    {
-      int j;
-      int retval;
-
-      if (nr == 0)
-	{
-	  memset (counters, '\0', sizeof (counters));
-	  memset (serial, '\0', sizeof (serial));
-	}
-
-      retval = pthread_barrier_wait (&barriers[NTHREADS - 1]);
-      if (retval != 0 && retval != PTHREAD_BARRIER_SERIAL_THREAD)
-	{
-	  printf ("thread %d failed to wait for all the others\n", nr);
-	  result = (void *) 1;
-	}
-
-      for (j = nr; j < NTHREADS; ++j)
-	{
-	  /* Increment the counter for this round.  */
-	  pthread_mutex_lock (&lock);
-	  ++counters[j];
-	  pthread_mutex_unlock (&lock);
-
-	  /* Wait for the rest.  */
-	  retval = pthread_barrier_wait (&barriers[j]);
-
-	  /* Test the result.  */
-	  if (nr == 0 && counters[j] != j + 1)
-	    {
-	      printf ("barrier in round %d released but count is %d\n",
-		      j, counters[j]);
-	      result = (void *) 1;
-	    }
-
-	  if (retval != 0)
-	    {
-	      if (retval != PTHREAD_BARRIER_SERIAL_THREAD)
-		{
-		  printf ("thread %d in round %d has nonzero return value != PTHREAD_BARRIER_SERIAL_THREAD\n",
-			  nr, j);
-		  result = (void *) 1;
-		}
-	      else
-		{
-		  pthread_mutex_lock (&lock);
-		  ++serial[j];
-		  pthread_mutex_unlock (&lock);
-		}
-	    }
-
-	  /* Wait for the rest again.  */
-	  retval = pthread_barrier_wait (&barriers[j]);
-
-	  /* Now we can check whether exactly one thread was serializing.  */
-	  if (nr == 0 && serial[j] != 1)
-	    {
-	      printf ("not exactly one serial thread in round %d\n", j);
-	      result = (void *) 1;
-	    }
-	}
-    }
-
-  return result;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#define TIMEOUT 60
-static int
-do_test (void)
-{
-  pthread_t threads[NTHREADS];
-  int i;
-  void *res;
-  int result = 0;
-
-  /* Initialized the barrier variables.  */
-  for (i = 0; i < NTHREADS; ++i)
-    if (pthread_barrier_init (&barriers[i], NULL, i + 1) != 0)
-      {
-	printf ("Failed to initialize barrier %d\n", i);
-	exit (1);
-      }
-
-  /* Start the threads.  */
-  for (i = 0; i < NTHREADS; ++i)
-    if (pthread_create (&threads[i], NULL, worker, (void *) (long int) i) != 0)
-      {
-	printf ("Failed to start thread %d\n", i);
-	exit (1);
-      }
-
-  /* And wait for them.  */
-  for (i = 0; i < NTHREADS; ++i)
-    if (pthread_join (threads[i], &res) != 0 || res != NULL)
-      {
-	printf ("thread %d returned a failure\n", i);
-	result = 1;
-      }
-    else
-      printf ("joined threads %d\n", i);
-
-  if (result == 0)
-    puts ("all OK");
-
-  return result;
-}
-
-#include "../test-skeleton.c"
diff --git a/nptl/tst-barrier4.c b/nptl/tst-barrier4.c
deleted file mode 100644
index fdf6c40a37..0000000000
--- a/nptl/tst-barrier4.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/* This tests destruction of a barrier right after waiting on it.
-   Copyright (C) 2004-2020 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   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, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-static pthread_barrier_t b1;
-static pthread_barrier_t b2;
-
-
-#define N 20
-
-static void *
-tf (void *arg)
-{
-  int round = 0;
-
-  while (round++ < 30)
-    {
-      if (pthread_barrier_wait (&b1) == PTHREAD_BARRIER_SERIAL_THREAD)
-	{
-	  pthread_barrier_destroy (&b1);
-	  if (pthread_barrier_init (&b1, NULL, N) != 0)
-	    {
-	      puts ("tf: 1st barrier_init failed");
-	      exit (1);
-	    }
-	}
-
-      if (pthread_barrier_wait (&b2) == PTHREAD_BARRIER_SERIAL_THREAD)
-	{
-	  pthread_barrier_destroy (&b2);
-	  if (pthread_barrier_init (&b2, NULL, N) != 0)
-	    {
-	      puts ("tf: 2nd barrier_init failed");
-	      exit (1);
-	    }
-	}
-    }
-
-  return NULL;
-}
-
-
-static int
-do_test (void)
-{
-  pthread_attr_t at;
-  int cnt;
-
-  if (pthread_attr_init (&at) != 0)
-    {
-      puts ("attr_init failed");
-      return 1;
-    }
-
-  if (pthread_attr_setstacksize (&at, 1 * 1024 * 1024) != 0)
-    {
-      puts ("attr_setstacksize failed");
-      return 1;
-    }
-
-  if (pthread_barrier_init (&b1, NULL, N) != 0)
-    {
-      puts ("1st barrier_init failed");
-      return 1;
-    }
-
-  if (pthread_barrier_init (&b2, NULL, N) != 0)
-    {
-      puts ("2nd barrier_init failed");
-      return 1;
-    }
-
-  pthread_t th[N - 1];
-  for (cnt = 0; cnt < N - 1; ++cnt)
-    if (pthread_create (&th[cnt], &at, tf, NULL) != 0)
-      {
-	puts ("pthread_create failed");
-	return 1;
-      }
-
-  if (pthread_attr_destroy (&at) != 0)
-    {
-      puts ("attr_destroy failed");
-      return 1;
-    }
-
-  tf (NULL);
-
-  for (cnt = 0; cnt < N - 1; ++cnt)
-    if (pthread_join (th[cnt], NULL) != 0)
-      {
-	puts ("pthread_join failed");
-	return 1;
-      }
-
-  return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"