Changes from review
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
This commit is contained in:
parent
5a24f90064
commit
e578791518
|
@ -13,12 +13,15 @@
|
|||
|
||||
package org.eclipse.jetty.websocket.core;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Interface for WebSocket Extensions.
|
||||
* <p>
|
||||
* That {@link Frame}s are passed through the Extension via the {@link IncomingFrames} and {@link OutgoingFrames} interfaces
|
||||
*/
|
||||
public interface Extension extends IncomingFrames, OutgoingFrames
|
||||
public interface Extension extends IncomingFrames, OutgoingFrames, Closeable
|
||||
{
|
||||
|
||||
void init(ExtensionConfig config, WebSocketComponents components);
|
||||
|
@ -26,7 +29,7 @@ public interface Extension extends IncomingFrames, OutgoingFrames
|
|||
/**
|
||||
* Used to clean up any resources after connection close.
|
||||
*/
|
||||
default void close()
|
||||
default void close() throws IOException
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -62,9 +62,17 @@ public class ExtensionStack implements IncomingFrames, OutgoingFrames, Dumpable
|
|||
|
||||
public void close()
|
||||
{
|
||||
for (Extension e : extensions)
|
||||
for (Extension ext : extensions)
|
||||
{
|
||||
e.close();
|
||||
try
|
||||
{
|
||||
ext.close();
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Extension Error During Close", t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -184,6 +184,7 @@ public class FrameFlusher extends IteratingCallback
|
|||
{
|
||||
try (AutoLock l = lock.lock())
|
||||
{
|
||||
// TODO: find a way to not create exception if cause is null.
|
||||
closedCause = cause == null ? new ClosedChannelException()
|
||||
{
|
||||
@Override
|
||||
|
|
|
@ -151,7 +151,15 @@ public class PerMessageDeflateExtension extends AbstractExtension implements Dem
|
|||
public void close()
|
||||
{
|
||||
// TODO: use IteratingCallback.close() instead of creating exception with failFlusher methods.
|
||||
ClosedChannelException exception = new ClosedChannelException();
|
||||
ClosedChannelException exception = new ClosedChannelException()
|
||||
{
|
||||
@Override
|
||||
public Throwable fillInStackTrace()
|
||||
{
|
||||
return this;
|
||||
}
|
||||
};
|
||||
incomingFlusher.close();
|
||||
incomingFlusher.failFlusher(exception);
|
||||
outgoingFlusher.failFlusher(exception);
|
||||
releaseInflater();
|
||||
|
|
|
@ -83,6 +83,7 @@ public abstract class TransformingFlusher
|
|||
*/
|
||||
public void failFlusher(Throwable t)
|
||||
{
|
||||
// TODO: find a way to close the flusher in non error case without exception.
|
||||
boolean failed = false;
|
||||
try (AutoLock l = lock.lock())
|
||||
{
|
||||
|
@ -91,6 +92,10 @@ public abstract class TransformingFlusher
|
|||
failure = t;
|
||||
failed = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
failure.addSuppressed(t);
|
||||
}
|
||||
}
|
||||
|
||||
if (failed)
|
||||
|
|
Loading…
Reference in New Issue