Fixed memory leaks in MqttTransportHandler (#1787)
This commit is contained in:
parent
e31052bc39
commit
4255bf485a
@ -34,6 +34,7 @@ import io.netty.handler.codec.mqtt.MqttSubscribeMessage;
|
||||
import io.netty.handler.codec.mqtt.MqttTopicSubscription;
|
||||
import io.netty.handler.codec.mqtt.MqttUnsubscribeMessage;
|
||||
import io.netty.handler.ssl.SslHandler;
|
||||
import io.netty.util.ReferenceCountUtil;
|
||||
import io.netty.util.concurrent.Future;
|
||||
import io.netty.util.concurrent.GenericFutureListener;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -112,10 +113,14 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
|
||||
@Override
|
||||
public void channelRead(ChannelHandlerContext ctx, Object msg) {
|
||||
log.trace("[{}] Processing msg: {}", sessionId, msg);
|
||||
if (msg instanceof MqttMessage) {
|
||||
processMqttMsg(ctx, (MqttMessage) msg);
|
||||
} else {
|
||||
ctx.close();
|
||||
try {
|
||||
if (msg instanceof MqttMessage) {
|
||||
processMqttMsg(ctx, (MqttMessage) msg);
|
||||
} else {
|
||||
ctx.close();
|
||||
}
|
||||
} finally {
|
||||
ReferenceCountUtil.safeRelease(msg);
|
||||
}
|
||||
}
|
||||
|
||||
@ -421,6 +426,11 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
|
||||
return new MqttConnAckMessage(mqttFixedHeader, mqttConnAckVariableHeader);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void channelReadComplete(ChannelHandlerContext ctx) {
|
||||
ctx.flush();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
|
||||
log.error("[{}] Unexpected Exception", sessionId, cause);
|
||||
|
||||
@ -212,18 +212,14 @@ public class JsonMqttAdaptor implements MqttTransportAdaptor {
|
||||
}
|
||||
|
||||
private static String validatePayload(UUID sessionId, ByteBuf payloadData, boolean isEmptyPayloadAllowed) throws AdaptorException {
|
||||
try {
|
||||
String payload = payloadData.toString(UTF8);
|
||||
if (payload == null) {
|
||||
log.warn("[{}] Payload is empty!", sessionId);
|
||||
if (!isEmptyPayloadAllowed) {
|
||||
throw new AdaptorException(new IllegalArgumentException("Payload is empty!"));
|
||||
}
|
||||
String payload = payloadData.toString(UTF8);
|
||||
if (payload == null) {
|
||||
log.warn("[{}] Payload is empty!", sessionId);
|
||||
if (!isEmptyPayloadAllowed) {
|
||||
throw new AdaptorException(new IllegalArgumentException("Payload is empty!"));
|
||||
}
|
||||
return payload;
|
||||
} finally {
|
||||
payloadData.release();
|
||||
}
|
||||
return payload;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user