diff -pruN glibc-2.17-c758a686/nptl/tst-join7mod.c glibc-2.17-c758a686.new/nptl/tst-join7mod.c
--- glibc-2.17-c758a686/nptl/tst-join7mod.c 2015-08-13 17:06:56.505685552 +0530
+++ glibc-2.17-c758a686.new/nptl/tst-join7mod.c 2015-08-14 12:42:10.446315345 +0530
@@ -18,6 +18,7 @@
. */
#include
+#include
#include
#include
@@ -27,7 +28,14 @@ static int running = 1;
static void *
test_run (void *p)
{
- while (atomic_load_relaxed (&running))
+ /* Spin on the value of RUNNING till it is 1. The RHEL-7 version of atomic.h
+ does not yet have an atomic_load. We don't need an acquire/release
+ barrier either since there is no ordering to worry about, but again,
+ atomic.h does not have relaxed atomic operations. */
+ int oldval;
+ do
+ oldval = atomic_compare_and_exchange_val_acq (&running, 0, 0);
+ while (oldval == 1);
printf ("Test running\n");
printf ("Test finished\n");
return NULL;
@@ -48,7 +56,7 @@ do_init (void)
static void __attribute__ ((destructor))
do_end (void)
{
- atomic_store_relaxed (&running, 0);
+ atomic_exchange_rel (&running, 0);
int ret = pthread_join (th, NULL);
if (ret != 0)