# HG changeset patch # User Roman Kennke # Date 1418228333 -3600 # Node ID 21d3b0133d61de351d50da38f7328dc86e3cae42 # Parent f93578332d69801b00e3d6e9eed8689a141cab29 Several fixes: make full-gc use the reference-pending lock, clean up when shutting down the Shenandoah thread. Added write barrier to static_field_addr(). diff -r f93578332d69 -r 21d3b0133d61 src/share/vm/gc_implementation/shenandoah/shenandoahConcurrentThread.cpp --- a/src/share/vm/gc_implementation/shenandoah/shenandoahConcurrentThread.cpp Tue Dec 09 16:05:51 2014 +0100 +++ b/src/share/vm/gc_implementation/shenandoah/shenandoahConcurrentThread.cpp Wed Dec 10 17:18:53 2014 +0100 @@ -151,6 +151,12 @@ // yield(); } } + + // Release any threads waiting for full-gc. We won't do it ;-) + MonitorLockerEx ml(ShenandoahFullGC_lock); + _do_full_gc = false; + ml.notify_all(); + } void ShenandoahConcurrentThread::do_full_gc() { diff -r f93578332d69 -r 21d3b0133d61 src/share/vm/gc_implementation/shenandoah/vm_operations_shenandoah.hpp --- a/src/share/vm/gc_implementation/shenandoah/vm_operations_shenandoah.hpp Tue Dec 09 16:05:51 2014 +0100 +++ b/src/share/vm/gc_implementation/shenandoah/vm_operations_shenandoah.hpp Wed Dec 10 17:18:53 2014 +0100 @@ -54,7 +54,7 @@ }; -class VM_ShenandoahFullGC : public VM_Operation { +class VM_ShenandoahFullGC : public VM_ShenandoahReferenceOperation { public: VMOp_Type type() const; void doit(); diff -r f93578332d69 -r 21d3b0133d61 src/share/vm/oops/instanceKlass.cpp --- a/src/share/vm/oops/instanceKlass.cpp Tue Dec 09 16:05:51 2014 +0100 +++ b/src/share/vm/oops/instanceKlass.cpp Wed Dec 10 17:18:53 2014 +0100 @@ -2516,7 +2516,7 @@ } address InstanceKlass::static_field_addr(int offset) { - return (address)(offset + InstanceMirrorKlass::offset_of_static_fields() + cast_from_oop(java_mirror())); + return (address)(offset + InstanceMirrorKlass::offset_of_static_fields() + cast_from_oop(oopDesc::bs()->resolve_and_maybe_copy_oop(java_mirror()))); }