src/java.net.http/share/classes/jdk/internal/net/http/PushGroup.java
branchhttp-client-branch
changeset 56268 481d8c9acc7f
parent 56138 4f92b988600e
child 56282 10cebcd18d47
equal deleted inserted replaced
56267:fe6f17faa23a 56268:481d8c9acc7f
    30 import java.util.concurrent.CompletableFuture;
    30 import java.util.concurrent.CompletableFuture;
    31 import java.net.http.HttpRequest;
    31 import java.net.http.HttpRequest;
    32 import java.net.http.HttpResponse;
    32 import java.net.http.HttpResponse;
    33 import java.net.http.HttpResponse.BodyHandler;
    33 import java.net.http.HttpResponse.BodyHandler;
    34 import java.net.http.HttpResponse.PushPromiseHandler;
    34 import java.net.http.HttpResponse.PushPromiseHandler;
       
    35 import java.util.concurrent.Executor;
       
    36 
    35 import jdk.internal.net.http.common.MinimalFuture;
    37 import jdk.internal.net.http.common.MinimalFuture;
    36 import jdk.internal.net.http.common.Log;
    38 import jdk.internal.net.http.common.Log;
    37 
    39 
    38 /**
    40 /**
    39  * One PushGroup object is associated with the parent Stream of the pushed
    41  * One PushGroup object is associated with the parent Stream of the pushed
    96         @Override public CompletableFuture<HttpResponse<T>> cf() { return cf; }
    98         @Override public CompletableFuture<HttpResponse<T>> cf() { return cf; }
    97 
    99 
    98         @Override public boolean accepted() { return cf != null; }
   100         @Override public boolean accepted() { return cf != null; }
    99     }
   101     }
   100 
   102 
   101     Acceptor<T> acceptPushRequest(HttpRequest pushRequest) {
   103     Acceptor<T> acceptPushRequest(HttpRequest pushRequest, Executor e) {
   102         AcceptorImpl<T> acceptor = new AcceptorImpl<>();
   104         AcceptorImpl<T> acceptor = new AcceptorImpl<>();
   103 
   105         try {
   104         pushPromiseHandler.applyPushPromise(initiatingRequest, pushRequest, acceptor::accept);
   106             pushPromiseHandler.applyPushPromise(initiatingRequest, pushRequest, acceptor::accept);
       
   107         } catch (Throwable t) {
       
   108             if (acceptor.accepted()) {
       
   109                 CompletableFuture<?> cf = acceptor.cf();
       
   110                 e.execute(() -> cf.completeExceptionally(t));
       
   111             }
       
   112             throw t;
       
   113         }
   105 
   114 
   106         synchronized (this) {
   115         synchronized (this) {
   107             if (acceptor.accepted()) {
   116             if (acceptor.accepted()) {
   108                 numberOfPushes++;
   117                 numberOfPushes++;
   109                 remainingPushes++;
   118                 remainingPushes++;