Fix Grizzly on close when error Signed-off-by: Jorge Bescos Gascon <jorge.bescos.gascon@oracle.com>
diff --git a/containers/grizzly2-http/src/main/java/org/glassfish/jersey/grizzly2/httpserver/GrizzlyHttpContainer.java b/containers/grizzly2-http/src/main/java/org/glassfish/jersey/grizzly2/httpserver/GrizzlyHttpContainer.java index 5bd8b1f..8f8ec5c 100644 --- a/containers/grizzly2-http/src/main/java/org/glassfish/jersey/grizzly2/httpserver/GrizzlyHttpContainer.java +++ b/containers/grizzly2-http/src/main/java/org/glassfish/jersey/grizzly2/httpserver/GrizzlyHttpContainer.java
@@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2025 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 @@ -231,25 +231,29 @@ public OutputStream writeResponseStatusAndHeaders(final long contentLength, final ContainerResponse context) throws ContainerException { - try { - final javax.ws.rs.core.Response.StatusType statusInfo = context.getStatusInfo(); - if (statusInfo.getReasonPhrase() == null) { - grizzlyResponse.setStatus(statusInfo.getStatusCode()); - } else { - grizzlyResponse.setStatus(statusInfo.getStatusCode(), statusInfo.getReasonPhrase()); - } - - grizzlyResponse.setContentLengthLong(contentLength); - - for (final Map.Entry<String, List<String>> e : context.getStringHeaders().entrySet()) { - for (final String value : e.getValue()) { - grizzlyResponse.addHeader(e.getKey(), value); + if (!grizzlyResponse.isCommitted()) { + try { + final javax.ws.rs.core.Response.StatusType statusInfo = context.getStatusInfo(); + if (statusInfo.getReasonPhrase() == null) { + grizzlyResponse.setStatus(statusInfo.getStatusCode()); + } else { + grizzlyResponse.setStatus(statusInfo.getStatusCode(), statusInfo.getReasonPhrase()); } - } - return grizzlyResponse.getOutputStream(); - } finally { - logger.debugLog("{0} - writeResponseStatusAndHeaders() called", name); + grizzlyResponse.setContentLengthLong(contentLength); + + for (final Map.Entry<String, List<String>> e : context.getStringHeaders().entrySet()) { + for (final String value : e.getValue()) { + grizzlyResponse.addHeader(e.getKey(), value); + } + } + + return grizzlyResponse.getOutputStream(); + } finally { + logger.debugLog("{0} - writeResponseStatusAndHeaders() called", name); + } + } else { + return null; } }