From 08d1ee4ce9de404c93cc3802f1c64b8938bdfc25 Mon Sep 17 00:00:00 2001 From: Alessio Soldano Date: Thu, 8 Feb 2018 16:02:46 +0100 Subject: [PATCH] RESTEASY-1800 (#1406) * Use resteasy's scheduler to handle timeout * Remove aysncContext timeout setting * Set asynContext timeout -1 and resteasy will take care of the timeout thing * timeout <=0 --- .../servlet/Servlet3AsyncHttpRequest.java | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/resteasy-jaxrs/src/main/java/org/jboss/resteasy/plugins/server/servlet/Servlet3AsyncHttpRequest.java b/resteasy-jaxrs/src/main/java/org/jboss/resteasy/plugins/server/servlet/Servlet3AsyncHttpRequest.java index 2a0cfd6c264..6c719649e2c 100755 --- a/resteasy-jaxrs/src/main/java/org/jboss/resteasy/plugins/server/servlet/Servlet3AsyncHttpRequest.java +++ b/resteasy-jaxrs/src/main/java/org/jboss/resteasy/plugins/server/servlet/Servlet3AsyncHttpRequest.java @@ -137,31 +137,29 @@ public void initialRequestThreadFinished() @Override public boolean setTimeout(long time, TimeUnit unit) throws IllegalStateException { + //getAsyncContext().setTimeout(-1); synchronized (responseLock) { - if (done || cancelled) return false; - Thread thread = creatingThread.get(); - if (thread != null && thread != Thread.currentThread()) { - // this is to get around TCK tests that call setTimeout in a separate thread which is illegal. - if (timeoutFuture != null && !timeoutFuture.cancel(false)) { - return false; - } - Runnable task = new Runnable() { - @Override - public void run() - { - LogMessages.LOGGER.debug(Messages.MESSAGES.scheduledTimeout()); - handleTimeout(); - } - }; - LogMessages.LOGGER.debug(Messages.MESSAGES.schedulingTimeout()); - timeoutFuture = asyncScheduler.schedule(task, time, unit); - } else { - AsyncContext asyncContext = getAsyncContext(); - long l = unit.toMillis(time); - asyncContext.setTimeout(l); - } + if (done || cancelled) + return false; + // this is to get around TCK tests that call setTimeout in a separate thread which is illegal. + if (timeoutFuture != null && !timeoutFuture.cancel(false)) + { + return false; + } + if (time <= 0) return true; + Runnable task = new Runnable() + { + @Override + public void run() + { + LogMessages.LOGGER.debug(Messages.MESSAGES.scheduledTimeout()); + handleTimeout(); + } + }; + LogMessages.LOGGER.debug(Messages.MESSAGES.schedulingTimeout()); + timeoutFuture = asyncScheduler.schedule(task, time, unit); } return true; } @@ -322,6 +320,8 @@ protected AsyncContext setupAsyncContext() AsyncContext asyncContext = servletRequest.startAsync(); asyncContext.addListener(asynchronousResponse); wasSuspended = true; + //set time out to -1 and resteasy will take care of timeout + asyncContext.setTimeout(-1); return asyncContext; }