From 7ca8d857a8f6aeb34c3ef8b7da0c7a2bc40998d9 Mon Sep 17 00:00:00 2001 From: Nikita Date: Wed, 7 Mar 2018 12:46:56 +0300 Subject: [PATCH] Fixed - memory leak in publish subscribe. #1326 --- .../client/handler/CommandPubSubDecoder.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/redisson/src/main/java/org/redisson/client/handler/CommandPubSubDecoder.java b/redisson/src/main/java/org/redisson/client/handler/CommandPubSubDecoder.java index 92271c598..c6893d798 100644 --- a/redisson/src/main/java/org/redisson/client/handler/CommandPubSubDecoder.java +++ b/redisson/src/main/java/org/redisson/client/handler/CommandPubSubDecoder.java @@ -77,21 +77,24 @@ public class CommandPubSubDecoder extends CommandDecoder { commands.remove(key); entries.put(channelName, new PubSubEntry(d.getMessageDecoder())); } + if (Arrays.asList(RedisCommands.PUNSUBSCRIBE.getName(), RedisCommands.UNSUBSCRIBE.getName()).contains(d.getCommand().getName())) { commands.remove(key); - entries.remove(key); + entries.remove(channelName); } } final RedisPubSubConnection pubSubConnection = RedisPubSubConnection.getFrom(channel); if (keepOrder) { - String ch = ((Message) result).getChannel(); + String channelName = ((Message) result).getChannel(); if (result instanceof PubSubPatternMessage) { - ch = ((PubSubPatternMessage)result).getPattern(); + channelName = ((PubSubPatternMessage)result).getPattern(); + } + PubSubEntry item = entries.get(channelName); + if (item != null) { + enqueueMessage(result, pubSubConnection, item); } - PubSubEntry item = entries.get(ch); - enqueueMessage(result, pubSubConnection, item); } else { executor.execute(new Runnable() { @Override