On Fri, 6 May 2022 09:14:53 GMT, Daniel Fuchs <dfu...@openjdk.org> wrote:

>> src/java.net.http/share/classes/jdk/internal/net/http/HttpClientImpl.java 
>> line 1039:
>> 
>>> 1037:                 e.abort(selectorClosedException());
>>> 1038:             } else {
>>> 1039:                 selector.wakeup();
>> 
>> Hello Daniel, before this PR, except for the `wakeupSelector()` method on 
>> `SelectorManager`, all other methods which were operating on the `selector` 
>> field were `synchronized` on the `SelectorManager` instance. After this PR, 
>> that continues to be true except for this specific line where the operation 
>> on the `selector` field is outside of a `synchronized` block. Would that be 
>> OK?
>
> And this is what (or at least a part of what) was causing the issue. We need 
> to add the event to the `registrations` list within a synchronized block 
> because that's a plain ArrayList whose access is controlled by synchronizing 
> on `this`. However the event should not be invoked within the synchronized 
> and block, and if you look at the calling method (eventUpdated) you will see 
> that this is what we are doing there too (raising the event without 
> synchronizing).

Thank you for that explanation. I understand this change better now.

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

PR: https://git.openjdk.java.net/jdk/pull/8562

Reply via email to