RFR: 8168914: Crash in ClassLoaderData/JNIHandleBlock::oops_do during concurrent marking
Kim Barrett
kim.barrett at oracle.com
Mon Feb 20 18:56:57 UTC 2017
> On Feb 20, 2017, at 10:47 AM, Erik Helin <erik.helin at oracle.com> wrote:
>
> Ok, lets see if we can wrap this up :) I just uploaded a new version, 03:
> - incremental: http://cr.openjdk.java.net/~ehelin/8168914/02-03/
> - full: http://cr.openjdk.java.net/~ehelin/8168914/03/
------------------------------------------------------------------------------
src/share/vm/classfile/classLoaderData.cpp
136 Chunk* volatile head = (Chunk*) OrderAccess::load_ptr_acquire((volatile intptr_t*)&_head);
The "volatile" in the declaration of head is unnecessary/misplaced.
It's not the variable "head" is modifiable by other threads. Correct
would be "Chunk volatile * head", but then the volatile would need to
be const_casted away when initializing "c". Better to just drop it,
as the load_acquire provides all the needed ordering.
------------------------------------------------------------------------------
src/share/vm/classfile/classLoaderData.cpp
136 Chunk* volatile head = (Chunk*) OrderAccess::load_ptr_acquire((volatile intptr_t*)&_head);
Why the cast of &_head for the load_ptr_acquire?
Similarly, why the casts (both of them) here:
127 OrderAccess::release_store_ptr((volatile intptr_t*) &_head, (intptr_t) next);
------------------------------------------------------------------------------
More information about the hotspot-dev
mailing list