summary refs log tree commit diff
path: root/nptl/tst-robust7.c
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2020-02-16 14:30:17 +0000
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2020-02-16 14:43:54 +0000
commita25077a431758b30aa60103945fe70811e8207ef (patch)
treec4d0fd554de8697c129b937c359f07a0f2a6af28 /nptl/tst-robust7.c
parentf640c4231df53aecd5880b4a172981e633de2718 (diff)
downloadglibc-a25077a431758b30aa60103945fe70811e8207ef.tar.gz
glibc-a25077a431758b30aa60103945fe70811e8207ef.tar.xz
glibc-a25077a431758b30aa60103945fe70811e8207ef.zip
pthread: Move robust mutex tests from nptl to sysdeps/pthread
tst-robust8.c prints some mutex internals for nptl debugging, this
needed to be made conditioned by getting built with nptl.
Diffstat (limited to 'nptl/tst-robust7.c')
-rw-r--r--nptl/tst-robust7.c212
1 files changed, 0 insertions, 212 deletions
diff --git a/nptl/tst-robust7.c b/nptl/tst-robust7.c
deleted file mode 100644
index be8e7492df..0000000000
--- a/nptl/tst-robust7.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/* Copyright (C) 2005-2020 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2005.
-
-   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 <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-static pthread_barrier_t b;
-static pthread_cond_t c = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t m;
-static bool first = true;
-
-
-static void *
-tf (void *arg)
-{
-  long int n = (long int) arg;
-
-  if (pthread_mutex_lock (&m) != 0)
-    {
-      printf ("thread %ld: mutex_lock failed\n", n + 1);
-      exit (1);
-    }
-
-  int e = pthread_barrier_wait (&b);
-  if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
-    {
-      printf ("thread %ld: barrier_wait failed\n", n + 1);
-      exit (1);
-    }
-
-  e = pthread_cond_wait (&c, &m);
-  if (first)
-    {
-      if (e != 0)
-	{
-	  printf ("thread %ld: cond_wait failed\n", n + 1);
-	  exit (1);
-	}
-      first = false;
-    }
-  else
-    {
-      if (e != EOWNERDEAD)
-	{
-	  printf ("thread %ld: cond_wait did not return EOWNERDEAD\n", n + 1);
-	  exit (1);
-	}
-    }
-
-  if (pthread_cancel (pthread_self ()) != 0)
-    {
-      printf ("thread %ld: cancel failed\n", n + 1);
-      exit (1);
-    }
-
-  pthread_testcancel ();
-
-  printf ("thread %ld: testcancel returned\n", n + 1);
-  exit (1);
-}
-
-
-static int
-do_test (void)
-{
-  pthread_mutexattr_t a;
-  if (pthread_mutexattr_init (&a) != 0)
-    {
-      puts ("mutexattr_init failed");
-      return 1;
-    }
-
-  if (pthread_mutexattr_setrobust_np (&a, PTHREAD_MUTEX_ROBUST_NP) != 0)
-    {
-      puts ("mutexattr_setrobust failed");
-      return 1;
-    }
-
-#ifdef ENABLE_PI
-  if (pthread_mutexattr_setprotocol (&a, PTHREAD_PRIO_INHERIT) != 0)
-    {
-      puts ("pthread_mutexattr_setprotocol failed");
-      return 1;
-    }
-#endif
-
-  int e;
-  e = pthread_mutex_init (&m, &a);
-  if (e != 0)
-    {
-#ifdef ENABLE_PI
-      if (e == ENOTSUP)
-	{
-	  puts ("PI robust mutexes not supported");
-	  return 0;
-	}
-#endif
-      puts ("mutex_init failed");
-      return 1;
-    }
-
-  if (pthread_mutexattr_destroy (&a) != 0)
-    {
-      puts ("mutexattr_destroy failed");
-      return 1;
-    }
-
-  if (pthread_barrier_init (&b, NULL, 2) != 0)
-    {
-      puts ("barrier_init failed");
-      return 1;
-    }
-
-#define N 5
-  pthread_t th[N];
-  for (long int n = 0; n < N; ++n)
-    {
-      if (pthread_create (&th[n], NULL, tf, (void *) n) != 0)
-	{
-	  printf ("pthread_create loop %ld failed\n", n + 1);
-	  return 1;
-	}
-
-      e = pthread_barrier_wait (&b);
-      if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
-	{
-	  printf ("parent: barrier_wait failed in round %ld\n", n + 1);
-	  return 1;
-	}
-    }
-
-  if (pthread_mutex_lock (&m) != 0)
-    {
-      puts ("parent: mutex_lock failed");
-      return 1;
-    }
-
-  if (pthread_mutex_unlock (&m) != 0)
-    {
-      puts ("parent: mutex_unlock failed");
-      return 1;
-    }
-
-  if (pthread_cond_broadcast (&c) != 0)
-    {
-      puts ("cond_broadcast failed");
-      return 1;
-    }
-
-  for (int n = 0; n < N; ++n)
-    {
-      void *res;
-      if (pthread_join (th[n], &res) != 0)
-	{
-	  printf ("join round %d failed\n", n + 1);
-	  return 1;
-	}
-      if (res != PTHREAD_CANCELED)
-	{
-	  printf ("thread %d not canceled\n", n + 1);
-	  return 1;
-	}
-    }
-
-  e = pthread_mutex_lock (&m);
-  if (e == 0)
-    {
-      puts ("parent: 2nd mutex_lock succeeded");
-      return 1;
-    }
-  if (e != EOWNERDEAD)
-    {
-      puts ("parent: mutex_lock did not return EOWNERDEAD");
-      return 1;
-    }
-
-  if (pthread_mutex_unlock (&m) != 0)
-    {
-      puts ("parent: 2nd mutex_unlock failed");
-      return 1;
-    }
-
-  if (pthread_mutex_destroy (&m) != 0)
-    {
-      puts ("mutex_destroy failed");
-      return 1;
-    }
-
-  return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"