[jdk17] RFR: 8269865: Async UL needs to handle ERANGE on exceeding SEM_VALUE_MAX
David Holmes
dholmes at openjdk.java.net
Tue Jul 6 07:32:50 UTC 2021
On Tue, 6 Jul 2021 06:43:24 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.
Sorry I have to withdraw my initial review approval.
This certainly helps allow the writer thread to catch up sooner, but there is still no guarantee that it will keep up with the loggers sufficient to avoid the overflow.
What we have to ensure in addition is that the number of outstanding log messages permitted by the buffer size is always less than the max value allow by the semaphore. Unfortunately we don't know what that value is.
David
-------------
Changes requested by dholmes (Reviewer).
PR: https://git.openjdk.java.net/jdk17/pull/216
More information about the hotspot-runtime-dev
mailing list