Refactor processResponseError in ServerRuntime

Signed-off-by: Maxim Nesen <maxim.nesen@oracle.com>
diff --git a/core-server/src/main/java/org/glassfish/jersey/server/ServerRuntime.java b/core-server/src/main/java/org/glassfish/jersey/server/ServerRuntime.java
index 0797653..981514c 100644
--- a/core-server/src/main/java/org/glassfish/jersey/server/ServerRuntime.java
+++ b/core-server/src/main/java/org/glassfish/jersey/server/ServerRuntime.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -460,6 +460,8 @@
                 final Iterable<ResponseErrorMapper> mappers = Providers.getAllProviders(runtime.injectionManager,
                         ResponseErrorMapper.class);
 
+                ContainerResponse processedResponse = null;
+
                 try {
                     Response processedError = null;
                     for (final ResponseErrorMapper mapper : mappers) {
@@ -470,11 +472,16 @@
                     }
 
                     if (processedError != null) {
-                        processResponse(new ContainerResponse(processingContext.request(), processedError));
+                        processedResponse =
+                                processResponse(new ContainerResponse(processingContext.request(), processedError));
                         processed = true;
                     }
                 } catch (final Throwable throwable) {
                     LOGGER.log(Level.FINE, LocalizationMessages.ERROR_EXCEPTION_MAPPING_PROCESSED_RESPONSE_ERROR(), throwable);
+                } finally {
+                    if (processedResponse != null) {
+                        release(processedResponse);
+                    }
                 }
             }