[jdk17] RFR: 8269865: Async UL needs to handle ERANGE on exceeding SEM_VALUE_MAX [v4]

David Holmes david.holmes at oracle.com
Thu Jul 8 09:31:49 UTC 2021


On 8/07/2021 4:38 pm, Xin Liu wrote:
> On Wed, 7 Jul 2021 08:08:10 GMT, Xin Liu <xliu at openjdk.org> wrote:
> 
>>> This patch solved the sempahore overflow issue with errno ERANGE or EOVERFLOW.
>>> Previously, we have asymmetric p/v operations for semaphore _sem. Each iteration
>>> only decrements _sem 1 but dequeues N messages. If logging threads keep preempting
>>> async logging thread, it may cause the value of _sem accumulates until overflow!
>>>
>>> The patch corrects the value of _sem after write(). n messages are dequeued/processed.
>>> We need to invoke _sem.wait() max(n-1, 1) time. This ensures that each iteration
>>> decrements n instead of 1.
>>
>> Xin Liu has updated the pull request incrementally with one additional commit since the last revision:
>>
>>    Use the new API signal_overflow of semaphore
>>    
>>    This patch handles overflow scenerios for Posix and Windows.
>>    MacOS platform doesn't have any error so we ignore it.
> 
> Thanks! Let's see the result. Meanwhile, allow me refactor this patch and spend more time semaphore of [Darwin-XNU](https://github.com/apple/darwin-xnu)

One possibility is to change the code to use a Monitor that acts as the 
asynclog lock and the wakeup mechanism, with a suitable guard in the 
writing code so that we don't try to use the Monitor until after it has 
been initialised (which is after the first log writes may occur).

David

> -------------
> 
> PR: https://git.openjdk.java.net/jdk17/pull/216
> 


More information about the hotspot-runtime-dev mailing list