This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
The following commit(s) were added to refs/heads/master by this push:
new 69a2c04144 [FIX] IMAP APPEND file leak
69a2c04144 is described below
commit 69a2c04144d4e413edc310173c9977b00bbbbc71
Author: Benoit TELLIER <[email protected]>
AuthorDate: Tue Mar 19 16:58:46 2024 +0100
[FIX] IMAP APPEND file leak
This exception:
java.util.NoSuchElementException: framer
Was unmanaged (reactor subscriber in the stacktrace)
Followed immediatly by:
org.apache.james.lifecycle.api.Disposable$LeakAwareFinalizer
"message":"Leak detected!
Resource
org.apache.james.imapserver.netty.ImapRequestFrameDecoder$FileHolderInner@3d635737
was not released before its referent was garbage-collected.
Resource management needs to be reviewed: ensure to always call dispose()
for disposable objects you work with.
Consider enabling advanced leak detection to further identify the problem.
In such case catching and propagating the exception as
well as releasing the file seems like a good idea.
---
.../james/imapserver/netty/ImapRequestFrameDecoder.java | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git
a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java
b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java
index fbd8930423..29e3067c8e 100644
---
a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java
+++
b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java
@@ -227,13 +227,16 @@ public class ImapRequestFrameDecoder extends
ByteToMessageDecoder implements Net
fileChunkConsumer.finalizeDataTransfer();
ImapRequestLineReader reader = new
NettyStreamImapRequestLineReader(ctx.channel(), fileChunkConsumer.getFile(),
RETRY);
+ // Remove ongoing subscription: now on lifecycle of
the message will be managed by ImapChannelUpstreamHandler.
+ // Not doing this causes IDLEd IMAP connections to
clear IMAP append literal while they are processed.
+ Object removed = attachment.remove(SUBSCRIPTION);
try {
- // Remove ongoing subscription: now on lifecycle
of the message will be managed by ImapChannelUpstreamHandler.
- // Not doing this causes IDLEd IMAP connections to
clear IMAP append literal while they are processed.
- attachment.remove(SUBSCRIPTION);
parseImapMessage(ctx, null, attachment,
Pair.of(reader, size), readerIndex)
.ifPresent(ctx::fireChannelRead);
- } catch (DecodingException e) {
+ } catch (Exception e) {
+ if (removed instanceof Disposable) {
+ ((Disposable) removed).dispose();
+ }
ctx.fireExceptionCaught(e);
}
});
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]