java/org/apache/coyote/AbstractProtocol.java
/**
     * Note: The name of this method originated with the Servlet 3.0
     * asynchronous processing but evolved over time to represent a timeout that
     * is triggered independently of the socket read/write timeouts.
     */
The name of this method originated with the Servlet 3.0
asynchronous processing but evolved over time to represent a timeout that
is triggered independently of the socket read/write timeouts.
The name of this method originated with the Servlet 3 . 0 asynchronous processing but evolved over time to represent a timeout that is triggered independently of the socket read / write timeouts .
protected void startAsyncTimeout() {
        if (timeoutFuture == null || (timeoutFuture != null && timeoutFuture.isDone())) {
            if (timeoutFuture != null && timeoutFuture.isDone()) {
                try {
                    timeoutFuture.get();
                } catch (InterruptedException | ExecutionException e) {
                    getLog().error(sm.getString("abstractProtocolHandler.asyncTimeoutError"), e);
                }
            }
            timeoutFuture = getUtilityExecutor().scheduleAtFixedRate(
                    new Runnable() {
                        @Override
                        public void run() {
                            long now = System.currentTimeMillis();
                            for (Processor processor : waitingProcessors) {
                                processor.timeoutAsync(now);
                            }
                        }
                    }, 1, 1, TimeUnit.SECONDS);
        }
    }
protected void startAsyncTimeout ( ) { if ( timeoutFuture == null || ( timeoutFuture != null && timeoutFuture . isDone ( ) ) ) { if ( timeoutFuture != null && timeoutFuture . isDone ( ) ) { try { timeoutFuture . get ( ) ; } catch ( InterruptedException | ExecutionException e ) { getLog ( ) . error ( sm . getString ( "abstractProtocolHandler.asyncTimeoutError" ) , e ) ; } } timeoutFuture = getUtilityExecutor ( ) . scheduleAtFixedRate ( new Runnable ( ) { @ Override public void run ( ) { long now = System . currentTimeMillis ( ) ; for ( Processor processor : waitingProcessors ) { processor . timeoutAsync ( now ) ; } } } , 1 , 1 , TimeUnit . SECONDS ) ; } }
Note: The name of this method originated with the Servlet 3.0
 asynchronous processing but evolved over time to represent a timeout that
 is triggered independently of the socket read/write timeouts.
Note : The name of this method originated with the Servlet 3 . 0 asynchronous processing but evolved over time to represent a timeout that is triggered independently of the socket read / write timeouts .
// There was an error executing the scheduled task, get it and log it