9d5bfa
--- tbb-2020.2/oneTBB-2020.2/src/rml/test/test_thread_monitor.cpp	2020-03-30 13:38:06.000000000 +0200
9d5bfa
+++ oneTBB-2020.2/src/rml/test/test_thread_monitor.cpp	2020-04-27 15:43:34.209452298 +0200
9d5bfa
@@ -23,6 +23,7 @@
9d5bfa
 #include "thread_monitor.h"
9d5bfa
 #include "harness_memory.h"
9d5bfa
 #include "tbb/semaphore.cpp"
9d5bfa
+#include <atomic>
9d5bfa
 
9d5bfa
 class ThreadState {
9d5bfa
     void loop();
9d5bfa
@@ -33,21 +34,21 @@
9d5bfa
     }
9d5bfa
     typedef rml::internal::thread_monitor thread_monitor;
9d5bfa
     thread_monitor monitor;
9d5bfa
-    volatile int request;
9d5bfa
-    volatile int ack;
9d5bfa
-    volatile unsigned clock;
9d5bfa
-    volatile unsigned stamp;
9d5bfa
+    std::atomic<int> request;
9d5bfa
+    std::atomic<int> ack;
9d5bfa
+    std::atomic<unsigned> clock;
9d5bfa
+    unsigned stamp;
9d5bfa
     ThreadState() : request(-1), ack(-1), clock(0) {}
9d5bfa
 };
9d5bfa
 
9d5bfa
 void ThreadState::loop() {
9d5bfa
     for(;;) {
9d5bfa
-        ++clock;
9d5bfa
         if( ack==request ) {
9d5bfa
             thread_monitor::cookie c;
9d5bfa
             monitor.prepare_wait(c);
9d5bfa
             if( ack==request ) {
9d5bfa
-                REMARK("%p: request=%d ack=%d\n", this, request, ack );
9d5bfa
+                REMARK("%p: request=%d ack=%d\n", this, request.load(), ack.load() );
9d5bfa
+                ++clock;
9d5bfa
                 monitor.commit_wait(c);
9d5bfa
             } else
9d5bfa
                 monitor.cancel_wait();
9d5bfa
@@ -60,7 +61,7 @@
9d5bfa
                     rml::internal::thread_monitor::yield();
9d5bfa
             }
9d5bfa
             int r = request;
9d5bfa
-            ack = request;
9d5bfa
+            ack = r;
9d5bfa
             if( !r ) return;
9d5bfa
         }
9d5bfa
     }
9d5bfa
@@ -89,7 +90,7 @@
9d5bfa
                                 REPORT("Warning: thread %d not waiting\n",i);
9d5bfa
                                 break;
9d5bfa
                             }
9d5bfa
-                        } while( t[i].stamp!=t[i].clock );
9d5bfa
+                        } while( t[i].stamp==0 || t[i].stamp!=t[i].clock );
9d5bfa
                     }
9d5bfa
                 }
9d5bfa
                 REMARK("notifying threads\n");