On Mon, 8 May 2023 02:07:25 GMT, David Holmes <dhol...@openjdk.org> wrote:

>> Afaiu, SMR/TLH keeps a terminated thread's TLS accessible, but doesn't stop 
>> the termination process.
>> 
>> If we initialize result with exited_allocated_bytes, the "too small" 
>> possibility is still there. We still have a window between that 
>> initialization and the creation of the threads iterator where threads may 
>> terminate and thus not be included in the iteration. And new threads may 
>> become active during the iteration and not be included. As Aleksey observes, 
>> an advantage is that threads that terminate during the iteration will be 
>> counted only once and we don't have to check for terminated threads.
>> 
>> If we stick with adding exited_allocated_bytes to result after the 
>> iteration, Volker is correct that we shouldn't include terminated threads in 
>> the sum because their allocated bytes values will have been added to 
>> exited_allocated_bytes. We have the same undercount possibility that 
>> initializing result with exited_allocated_bytes has, so this (fixed) 
>> approach can result in "too small" also, but "too large" goes away.
>> 
>> Looks like both approaches are equivalent, so let's go with initializing 
>> result with exited_allocated_bytes because it avoids a comparison in the 
>> loop.
>
>> Afaiu, SMR/TLH keeps a terminated thread's TLS accessible, but doesn't stop 
>> the termination process.
> 
> Incorrect. A thread cannot complete the termination process if it is 
> contained by a TLH - see ` ThreadsSMRSupport::smr_delete` and the call to 
> `wait_until_not_protected`.
> 
> But not sure that helps with the zero-else-double accounting problem. Any 
> read of the "total accumulated bytes written to date" value is racing with 
> terminating threads.

Resolved, see below.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/13814#discussion_r1192494925

Reply via email to