< prev index next >

src/hotspot/share/gc/shared/taskTerminator.cpp

Print this page
rev 59131 : imported patch assert_empty

@@ -37,21 +37,23 @@
 
   _blocker = new Monitor(Mutex::leaf, "TaskTerminator", false, Monitor::_safepoint_check_never);
 }
 
 TaskTerminator::~TaskTerminator() {
-  assert(_offered_termination == 0 || !peek_in_queue_set(), "Precondition");
-  assert(_offered_termination == 0 || _offered_termination == _n_threads, "Terminated or aborted" );
+  if (_offered_termination != 0) {
+    assert(_offered_termination == _n_threads, "Must be terminated or aborted");
+    assert_queue_set_empty();
+  }
 
   assert(_spin_master == NULL, "Should have been reset");
   assert(_blocker != NULL, "Can not be NULL");
   delete _blocker;
 }
 
 #ifdef ASSERT
-bool TaskTerminator::peek_in_queue_set() {
-  return _queue_set->peek();
+void TaskTerminator::assert_queue_set_empty() const {
+  _queue_set->assert_empty();
 }
 #endif
 
 void TaskTerminator::yield() {
   assert(_offered_termination <= _n_threads, "Invariant");

@@ -85,21 +87,21 @@
   assert(_blocker != NULL, "Invariant");
 
   // Single worker, done
   if (_n_threads == 1) {
     _offered_termination = 1;
-    assert(!peek_in_queue_set(), "Precondition");
+    assert_queue_set_empty();
     return true;
   }
 
   _blocker->lock_without_safepoint_check();
   _offered_termination++;
   // All arrived, done
   if (_offered_termination == _n_threads) {
     _blocker->notify_all();
     _blocker->unlock();
-    assert(!peek_in_queue_set(), "Precondition");
+    assert_queue_set_empty();
     return true;
   }
 
   Thread* the_thread = Thread::current();
   while (true) {

@@ -108,28 +110,28 @@
 
       _blocker->unlock();
 
       if (do_spin_master_work(terminator)) {
         assert(_offered_termination == _n_threads, "termination condition");
-        assert(!peek_in_queue_set(), "Precondition");
+        assert_queue_set_empty();
         return true;
       } else {
         _blocker->lock_without_safepoint_check();
         // There is possibility that termination is reached between dropping the lock
         // before returning from do_spin_master_work() and acquiring lock above.
         if (_offered_termination == _n_threads) {
           _blocker->unlock();
-          assert(!peek_in_queue_set(), "Precondition");
+          assert_queue_set_empty();
           return true;
         }
       }
     } else {
       _blocker->wait_without_safepoint_check(WorkStealingSleepMillis);
 
       if (_offered_termination == _n_threads) {
         _blocker->unlock();
-        assert(!peek_in_queue_set(), "Precondition");
+        assert_queue_set_empty();
         return true;
       }
     }
 
     size_t tasks = tasks_in_queue_set();
< prev index next >