Skip to content

Commit 44d05d7

Browse files
committed
Improve handling of failures during recycle() methods
1 parent 5958324 commit 44d05d7

14 files changed

Lines changed: 52 additions & 6 deletions

java/org/apache/catalina/connector/LocalStrings.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ coyoteRequest.attributeEvent=Exception thrown by attributes event listener
5151
coyoteRequest.authenticate.ise=Cannot call authenticate() after the response has been committed
5252
coyoteRequest.changeSessionId=Cannot change session ID. There is no session associated with this request.
5353
coyoteRequest.chunkedPostTooLarge=Parameters were not parsed because the size of the posted data was too big. Because this request was a chunked request, it could not be processed further. Use the maxPostSize attribute of the connector to resolve this if the application should accept large POSTs.
54+
coyoteRequest.deletePartFailed=Failed to deleted temporary file used for part [{0}]
5455
coyoteRequest.filterAsyncSupportUnknown=Unable to determine if any filters do not support async processing
5556
coyoteRequest.getContextPath.ise=Unable to find match between the canonical context path [{0}] and the URI presented by the user agent [{1}]
5657
coyoteRequest.getInputStream.ise=getReader() has already been called for this request

java/org/apache/catalina/connector/Request.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -473,8 +473,9 @@ public void recycle() {
473473
for (Part part : parts) {
474474
try {
475475
part.delete();
476-
} catch (IOException ignored) {
477-
// ApplicationPart.delete() never throws an IOEx
476+
} catch (Throwable t) {
477+
ExceptionUtils.handleThrowable(t);
478+
log.warn(sm.getString("coyoteRequest.deletePartFailed", part.getName()), t);
478479
}
479480
}
480481
parts = null;
@@ -527,8 +528,8 @@ public void recycle() {
527528
asyncSupported = null;
528529
if (asyncContext != null) {
529530
asyncContext.recycle();
531+
asyncContext = null;
530532
}
531-
asyncContext = null;
532533
}
533534

534535

java/org/apache/catalina/core/ApplicationHttpRequest.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.apache.catalina.util.ParameterMap;
4949
import org.apache.catalina.util.RequestUtil;
5050
import org.apache.catalina.util.URLEncoder;
51+
import org.apache.tomcat.util.ExceptionUtils;
5152
import org.apache.tomcat.util.buf.B2CConverter;
5253
import org.apache.tomcat.util.buf.MessageBytes;
5354
import org.apache.tomcat.util.http.Parameters;
@@ -618,7 +619,12 @@ public PushBuilder newPushBuilder() {
618619
*/
619620
public void recycle() {
620621
if (session != null) {
621-
session.endAccess();
622+
try {
623+
session.endAccess();
624+
} catch (Throwable t) {
625+
ExceptionUtils.handleThrowable(t);
626+
context.getLogger().warn(sm.getString("applicationHttpRequest.sessionEndAccessFail"), t);
627+
}
622628
}
623629
}
624630

java/org/apache/catalina/core/LocalStrings.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ applicationFilterRegistration.nullInitParam=Unable to set initialisation paramet
5959
applicationFilterRegistration.nullInitParams=Unable to set initialisation parameters for filter due to null name and/or value. Name [{0}], Value [{1}]
6060

6161
applicationHttpRequest.fragmentInDispatchPath=The fragment in dispatch path [{0}] has been removed
62+
applicationHttpRequest.sessionEndAccessFail=Exception triggered ending access to session while recycling request
6263

6364
applicationPushBuilder.methodInvalid=The HTTP method for a push request must be both cacheable and safe but [{0}] is not
6465
applicationPushBuilder.methodNotToken=HTTP methods must be tokens but [{0}] contains a non-token character

java/org/apache/catalina/core/LocalStrings_cs.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ applicationDispatcher.specViolation.response=Původní ServletResponse nebo zapo
2424

2525
applicationFilterRegistration.nullInitParams=Není možné nastavit inicializační parametry pro filtr kvůli hodnotě null ve jménu či hodnotě. Jméno [{0}], Hodnota [{1}]
2626

27+
applicationHttpRequest.sessionEndAccessFail=Výjimka vyvolala ukončení přístupu k session během recykllování dotazu
28+
2729
aprListener.initializingFIPS=Inicializace FIPS módu...
2830

2931
containerBase.backgroundProcess.cluster=Výjimka při zpracování procesu na pozadí v clusteru [{0}]

java/org/apache/catalina/core/LocalStrings_es.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ applicationFilterConfig.jmxUnregisterFail=Ha fallado el desregistro JMX para el
5252
applicationFilterRegistration.nullInitParam=No puedo poner el parámetro de inicialización para el filtro debido a un nombre nulo y/o valor. Nombre [{0}], Valor [{1}]
5353
applicationFilterRegistration.nullInitParams=No puedo poner los parámetros de inicialización para el filtro debido a un nombre nulo y/o valor. Nombre [{0}], Valor [{1}]
5454

55+
applicationHttpRequest.sessionEndAccessFail=Excepción disparada acabando acceso a sesión mientras se reciclaba el requerimiento
56+
5557
applicationServletRegistration.setServletSecurity.iae=Se ha especificado restricción Null para el servlet [{0}] desplegado en el contexto con el nombre [{1}]
5658
applicationServletRegistration.setServletSecurity.ise=No se pueden añadir restricciones de seguridad al servlet [{0}] desplegado en el contexto con el nombre [{1}] ya que el contexto ya ha sido inicializado.
5759

java/org/apache/catalina/core/LocalStrings_fr.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ applicationFilterRegistration.nullInitParam=Impossible de fixer le paramètre d'
5959
applicationFilterRegistration.nullInitParams=Impossible de fixer les paramètres d''initialisation du filtre, à cause d''un nom ou d''une valeur nulle, nom [{0}], valeur [{1}]
6060

6161
applicationHttpRequest.fragmentInDispatchPath=Le fragment dans le chemin de dispatch [{0}] a été enlevé
62+
applicationHttpRequest.sessionEndAccessFail=Exception lancée durant l'arrêt de l'accès à la session durant le recyclage de la requête
6263

6364
applicationPushBuilder.methodInvalid=La méthode HTTP pour une requête push doit être à la fois être sans danger et pouvoir être mise en cache, mais [{0}] ne correspond pas
6465
applicationPushBuilder.methodNotToken=Les méthodes HTTP doivent être des "token", mais [{0}] contient un caractère invalide dans un token.

java/org/apache/catalina/core/LocalStrings_ja.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ applicationFilterRegistration.nullInitParam=NULLの名前や値のためにフ
5959
applicationFilterRegistration.nullInitParams=キー [{0}] または値 [{1}] のいずれかが null のためフィルターの初期化パラメータを設定できません。
6060

6161
applicationHttpRequest.fragmentInDispatchPath=ディスパッチパス [{0}] 中のフラグメントは除去されました
62+
applicationHttpRequest.sessionEndAccessFail=リクエストの再利用中に行ったセッションへのアクセス終了処理で例外が送出されました。
6263

6364
applicationPushBuilder.methodInvalid=プッシュリクエストの HTTP メソッドはキャッシュ可能、かつ、安全でなければなりません。[{0}] は指定できません。
6465
applicationPushBuilder.methodNotToken=HTTP メソッド [{0}] にトークンとして利用できない文字が含まれています。

java/org/apache/catalina/core/LocalStrings_ko.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ applicationFilterRegistration.nullInitParam=이름 또는 값 또는 둘 다 널
5959
applicationFilterRegistration.nullInitParams=널인 이름 또는 값 때문에, 필터의 초기화 파라미터를 설정할 수 없습니다. 이름: [{0}], 값: [{1}]
6060

6161
applicationHttpRequest.fragmentInDispatchPath=디스패치 경로 [{0}](으)로부터 URI fragment를 제거했습니다.
62+
applicationHttpRequest.sessionEndAccessFail=요청을 참조 해제하는 과정에서, 세션에 대한 접근을 종료시키려 개시하는 중 예외 발생
6263

6364
applicationPushBuilder.methodInvalid=PUSH 요청을 위한 HTTP 메소드는 반드시 캐시 가능하고 안전해야 하는데, [{0}]은(는) 그렇지 않습니다.
6465
applicationPushBuilder.methodNotToken=HTTP 메소드들은 토큰들이어야 하지만, [{0}]은(는) 토큰이 아닌 문자를 포함하고 있습니다.

java/org/apache/catalina/core/LocalStrings_zh_CN.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ applicationFilterRegistration.nullInitParam=由于名称和/或值为空,无
6060
applicationFilterRegistration.nullInitParams=由于name和(或)value为null,无法为过滤器设置初始化参数。name为 [{0}],value为 [{1}]
6161

6262
applicationHttpRequest.fragmentInDispatchPath=调度路径[{0}]中的片段已被删除
63+
applicationHttpRequest.sessionEndAccessFail=在回收请求时,异常触发了对会话的结束访问。
6364

6465
applicationPushBuilder.methodInvalid=推送请求的HTTP方法必须既可缓存又安全,但是[{0}]不是
6566
applicationPushBuilder.methodNotToken=HTTP方法必须是令牌(token),但 [{0}] 包含非令牌字符

0 commit comments

Comments
 (0)