RFR: 8210889: Some service thread cleanups can be starved

David Holmes david.holmes at oracle.com
Thu Sep 20 01:04:49 UTC 2018


On 20/09/2018 5:34 AM, Kim Barrett wrote:
>> On Sep 19, 2018, at 3:32 AM, Thomas Schatzl <thomas.schatzl at oracle.com> wrote:
>>
>> Hi,
>>
>> On Tue, 2018-09-18 at 20:46 -0400, Kim Barrett wrote:
>>> Please review this small change to the ServiceThread.  When checking
>>> for work to be done, rather than immediately doing the first kind of
>>> work found, instead determine all pending work and then do all known
>>> pending work.  This avoids the possibility of frequently available
>>> work early in the sequence of checks from leading to starvation of
>>> work associated with later checks.
>>
>> Looks good. Maybe the comment could be improved because it does not
>> answer why we do not want short-circuiting in this case. It only seems
>> to describe what the code does.
>>
>> Thanks,
>>   Thomas
> 
> Sure, I can do that:
> 
>        // Process all available work on each (outer) iteration, rather than
>        // only the first recognized bit of work, to avoid frequently true early
>        // tests from potentially starving later work.  Hence the use of
>        // arithmetic-or to combine results; we don't want short-circuiting.

I was going to ask about the "== 0" rather than "== false", but I assume 
| is always a bitwise-or even for bool rather than just being a 
non-short-circuiting-or.

Of course now you have fixed this the operations previously getting 
preferential treatment may exhibit additional latency. ;-)

Cheers,
David

> Thanks for reviewing.
> 


More information about the hotspot-runtime-dev mailing list