RFR: 8338383: Implement JEP 491: Synchronize Virtual Threads without Pinning [v6]
Patricio Chilano Mateo
pchilanomate at openjdk.org
Wed Oct 23 17:26:16 UTC 2024
On Mon, 21 Oct 2024 12:32:00 GMT, Axel Boldt-Christmas <aboldtch at openjdk.org> wrote:
>> Patricio Chilano Mateo has updated the pull request incrementally with three additional commits since the last revision:
>>
>> - Rename timedWaitNonce to timedWaitSeqNo
>> - Fix comment in Thread.java
>> - Clear oops when thawing lockstack + add thaw_lockstack()
>
> src/hotspot/share/oops/stackChunkOop.cpp line 471:
>
>> 469: }
>> 470: }
>> 471: }
>
> Can we turn these three very similar loops into one? In my opinion, it is easier to parse.
>
> ```C++
> void stackChunkOopDesc::copy_lockstack(oop* dst) {
> const int cnt = lockstack_size();
> const bool requires_gc_barriers = is_gc_mode() || requires_barriers();
> const bool requires_uncompress = requires_gc_barriers && has_bitmap() && UseCompressedOops;
> const auto get_obj = [&](intptr_t* at) -> oop {
> if (requires_gc_barriers) {
> if (requires_uncompress) {
> return HeapAccess<>::oop_load(reinterpret_cast<narrowOop*>(at));
> }
> return HeapAccess<>::oop_load(reinterpret_cast<oop*>(at));
> }
> return *reinterpret_cast<oop*>(at);
> };
>
> intptr_t* lockstack_start = start_address();
> for (int i = 0; i < cnt; i++) {
> oop mon_owner = get_obj(&lockstack_start[i]);
> assert(oopDesc::is_oop(mon_owner), "not an oop");
> dst[i] = mon_owner;
> }
> }
Done. I combined it with the oop clearing suggestion.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/21565#discussion_r1813222417
More information about the nio-dev
mailing list