# HG changeset patch # User ysr # Date 1227549211 28800 # Node ID df4305d4c1a1fad22ac72f7d067d8e45274a4875 # Parent c96030fff130d8f3168b73e9443f7d8c748b2eab 6774607: SIGSEGV or (!is_null(v),"oop value can never be zero") assertion when running with CMS and COOPs Summary: Use the more permissive set_klass_or_null() and klass_or_null() interfaces in ParNew's workqueue overflow code that manipulates the klass-word. Reviewed-by: coleenp diff -r c96030fff130 -r df4305d4c1a1 src/share/vm/gc_implementation/parNew/parNewGeneration.cpp --- a/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp Thu Nov 20 16:56:09 2008 -0800 +++ b/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp Mon Nov 24 09:53:31 2008 -0800 @@ -1205,7 +1205,7 @@ int n = 0; while (cur != NULL) { oop obj_to_push = cur->forwardee(); - oop next = oop(cur->klass()); + oop next = oop(cur->klass_or_null()); cur->set_klass(obj_to_push->klass()); if (par_scan_state->should_be_partially_scanned(obj_to_push, cur)) { obj_to_push = cur; diff -r c96030fff130 -r df4305d4c1a1 src/share/vm/oops/oop.inline.hpp --- a/src/share/vm/oops/oop.inline.hpp Thu Nov 20 16:56:09 2008 -0800 +++ b/src/share/vm/oops/oop.inline.hpp Mon Nov 24 09:53:31 2008 -0800 @@ -92,7 +92,7 @@ // This is only to be used during GC, for from-space objects, so no // barrier is needed. if (UseCompressedOops) { - _metadata._compressed_klass = encode_heap_oop_not_null(k); + _metadata._compressed_klass = encode_heap_oop(k); // may be null (parnew overflow handling) } else { _metadata._klass = (klassOop)k; }