void startReadTimeout(ReadTimeoutTimerTask task) { if (requestTimeout == null || (!requestTimeout.isExpired() && readTimeoutValue < (requestTimeoutMillisTime - unpreciseMillisTime()))) { // only schedule a new readTimeout if the requestTimeout doesn't happen first if (task == null) { // first call triggered from outside (else is read timeout is re-scheduling itself) task = new ReadTimeoutTimerTask(nettyResponseFuture, requestSender, this, readTimeoutValue); } this.readTimeout = newTimeout(task, readTimeoutValue); } else if (task != null) { // read timeout couldn't re-scheduling itself, clean up task.clean(); } }
public TimeoutsHolder(Timer nettyTimer, NettyResponseFuture<?> nettyResponseFuture, NettyRequestSender requestSender, AsyncHttpClientConfig config, InetSocketAddress originalRemoteAddress) { this.nettyTimer = nettyTimer; this.nettyResponseFuture = nettyResponseFuture; this.requestSender = requestSender; this.remoteAddress = originalRemoteAddress; final Request targetRequest = nettyResponseFuture.getTargetRequest(); final int readTimeoutInMs = targetRequest.getReadTimeout(); this.readTimeoutValue = readTimeoutInMs == 0 ? config.getReadTimeout() : readTimeoutInMs; int requestTimeoutInMs = targetRequest.getRequestTimeout(); if (requestTimeoutInMs == 0) { requestTimeoutInMs = config.getRequestTimeout(); } if (requestTimeoutInMs != -1) { requestTimeoutMillisTime = unpreciseMillisTime() + requestTimeoutInMs; requestTimeout = newTimeout(new RequestTimeoutTimerTask(nettyResponseFuture, requestSender, this, requestTimeoutInMs), requestTimeoutInMs); } else { requestTimeoutMillisTime = -1L; requestTimeout = null; } }