RFR: 8296889: Race condition when cancelling a request

Daniel Fuchs dfuchs at openjdk.org
Tue Nov 15 14:21:01 UTC 2022


On Tue, 15 Nov 2022 08:56:57 GMT, Jaikiran Pai <jpai at openjdk.org> wrote:

>> The CancelRequest test was observed failing again after [JDK-8294916](https://bugs.openjdk.org/browse/JDK-8294916) was integrated: there is a small race condition window in the code that unregisters the request BodySubscriber when a request is cancelled: if the request cancellation happens after the body subscriber is registered but before it is subscribed it may not be unregistered. 
>> 
>> The solution is to register it only after it has been successfully subscribed.
>
> src/java.net.http/share/classes/jdk/internal/net/http/Http1Exchange.java line 213:
> 
>> 211:         @Override
>> 212:         public void onSubscribed() {
>> 213:             exchange.registerResponseSubscriber(this);
> 
> The `registerResponseSubscriber` in addition to registering it with the client will also set a local `responseSubscriber` member. Do you think we should `null` it out in the callbacks where we call the `unregisterResponseSubscriber`?

Good question. But I believe not:  it wasn't needed before this change. The only place where we look at the subscriber is cancelImpl. Depending on the propagation of error conditions we might introduce a race if we did that - especially since we are unregistering the subscriber before propagating errors (if any).

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

PR: https://git.openjdk.org/jdk/pull/11110


More information about the net-dev mailing list