On Wed, 14 Jun 2023 19:28:23 GMT, Alex Menkov <[email protected]> wrote:
>> src/hotspot/share/prims/jvmtiTagMap.cpp line 2325:
>>
>>> 2323: // Need to apply load barriers for unmounted vthreads.
>>> 2324: nmethod* nm = jvf->cb()->as_nmethod();
>>> 2325: nm->run_nmethod_entry_barrier();
>>
>> This looks good in general.
>> However, I'm looking at the `stackChunkOopDesc::do_barriers0()`
>> implementation and wonder if a similar trick is needed for interpreter
>> frames (to support `Class Redefinition`):
>>
>> template <stackChunkOopDesc::BarrierType barrier, ChunkFrames frame_kind,
>> typename RegisterMapT>
>> void stackChunkOopDesc::do_barriers0(const
>> StackChunkFrameStream<frame_kind>& f, const RegisterMapT* map) {
>> // We need to invoke the write barriers so as not to miss oops in old
>> chunks that haven't yet been concurrently scanned
>> assert (!f.is_done(), "");
>>
>> if (f.is_interpreted()) {
>> Method* m = f.to_frame().interpreter_frame_method();
>> // Class redefinition support
>> m->record_gc_epoch();
>> } else if (f.is_compiled()) {
>> nmethod* nm = f.cb()->as_nmethod();
>> // The entry barrier takes care of having the right synchronization
>> // when keeping the nmethod alive during concurrent execution.
>> nm->run_nmethod_entry_barrier();
>> // There is no need to mark the Method, as class redefinition will walk
>> the
>> // CodeCache, noting their Methods
>> }
>> . . .
>
>> This looks good in general. However, I'm looking at the
>> `stackChunkOopDesc::do_barriers0()` implementation and wonder if a similar
>> trick is needed for interpreter frames (to support `Class Redefinition`):
>>
>
> This code collects references from thread stack, I don't see how class
> redefinition can affect them
Thanks. I agree with it.
The stackChunkOopDesc implementation needs it as it does some stack chunk
updates.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/14460#discussion_r1231803017