RFR (XXS): 7006810: G1: Introduce peace-of-mind checking in the Suspendible Thread Set

Kim Barrett kim.barrett at oracle.com
Mon Apr 6 17:58:22 UTC 2015


On Apr 6, 2015, at 1:25 PM, Joseph Provino <joseph.provino at oracle.com> wrote:
> 
> CR:  https://bugs.openjdk.java.net/browse/JDK-7006810
> 
> webrev:  http://cr.openjdk.java.net/~jprovino/7006810/webrev.00
> 
> test:  jprt

------------------------------------------------------------------------------
src/share/vm/runtime/thread.hpp
 216 #ifdef PRODUCT
 217   void set_has_joined_suspendible_thread_set(bool has_joined_suspendible_thread_set) { }
 218 
 219   bool has_joined_suspendible_thread_set() { return false; }
 220 #else
 221   void set_has_joined_suspendible_thread_set(bool has_joined_suspendible_thread_set) {
 222     _has_joined_suspendible_thread_set = has_joined_suspendible_thread_set;
 223   }
 224 
 225   bool has_joined_suspendible_thread_set() { return _has_joined_suspendible_thread_set; }
 226 #endif

Given that has_joined_suspendible_thread_set() only gives an accurate
value in PRODUCT mode, I would much rather see it not defined at all
in non-PRODUCT mode.

And given that it is only called as an assert predicate, I think
DEBUG_ONLY would be more appropriate than NOT_PRODUCT.

------------------------------------------------------------------------------ 
src/share/vm/gc_implementation/shared/suspendibleThreadSet.cpp 
  41   Thread::current()->set_has_joined_suspendible_thread_set(true);
...
  47   Thread::current()->set_has_joined_suspendible_thread_set(false);

I think these expressions should be NOT_PRODUCT / DEBUG_ONLY.  Even if
the set_has_joined_xxx gets compiled away in PRODUCT mode, I think the
current thread access may not be completely compiled away in all
cases.

------------------------------------------------------------------------------ 
src/share/vm/gc_implementation/shared/suspendibleThreadSet.cpp 
  41   Thread::current()->set_has_joined_suspendible_thread_set(true);

I think this assignment should be preceeded by an assert that the
thread hasn't already joined.  Similarly, here:

  47   Thread::current()->set_has_joined_suspendible_thread_set(false);

I think this assignment should be preceeded by an assert that the
thread had previously joined.

------------------------------------------------------------------------------

> test: jprt

Did you try testing with one or the other set_has_joined_xxx calls
left out, to verify the expected errors occurred?

------------------------------------------------------------------------------




More information about the hotspot-gc-dev mailing list