Skip to content

Commit 26402f0

Browse files
committed
Null-proof channel state retrieval in AbstractMetricsCollector
A channel message may have been closed by the time a metrics method is called (e.g. when cancelling a consumer the metrics collector is called after the RPC is completed), so the channel state may no longer be there. This commit null-proofs methods rely on the channel state retrieval. Fixes #1592 (cherry picked from commit de6b708) Conflicts: src/main/java/com/rabbitmq/client/impl/AbstractMetricsCollector.java
1 parent df2ed3d commit 26402f0

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

src/main/java/com/rabbitmq/client/impl/AbstractMetricsCollector.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,9 +160,12 @@ public void basicConsume(Channel channel, String consumerTag, boolean autoAck) {
160160
try {
161161
if(!autoAck) {
162162
ChannelState channelState = channelState(channel);
163+
if (channelState == null) {
164+
return;
165+
}
163166
channelState.lock.lock();
164167
try {
165-
channelState(channel).consumersWithManualAck.add(consumerTag);
168+
channelState.consumersWithManualAck.add(consumerTag);
166169
} finally {
167170
channelState.lock.unlock();
168171
}
@@ -176,9 +179,12 @@ public void basicConsume(Channel channel, String consumerTag, boolean autoAck) {
176179
public void basicCancel(Channel channel, String consumerTag) {
177180
try {
178181
ChannelState channelState = channelState(channel);
182+
if (channelState == null) {
183+
return;
184+
}
179185
channelState.lock.lock();
180186
try {
181-
channelState(channel).consumersWithManualAck.remove(consumerTag);
187+
channelState.consumersWithManualAck.remove(consumerTag);
182188
} finally {
183189
channelState.lock.unlock();
184190
}
@@ -193,9 +199,12 @@ public void consumedMessage(Channel channel, long deliveryTag, boolean autoAck)
193199
markConsumedMessage();
194200
if(!autoAck) {
195201
ChannelState channelState = channelState(channel);
202+
if (channelState == null) {
203+
return;
204+
}
196205
channelState.lock.lock();
197206
try {
198-
channelState(channel).unackedMessageDeliveryTags.add(deliveryTag);
207+
channelState.unackedMessageDeliveryTags.add(deliveryTag);
199208
} finally {
200209
channelState.lock.unlock();
201210
}
@@ -210,6 +219,9 @@ public void consumedMessage(Channel channel, long deliveryTag, String consumerTa
210219
try {
211220
markConsumedMessage();
212221
ChannelState channelState = channelState(channel);
222+
if (channelState == null) {
223+
return;
224+
}
213225
channelState.lock.lock();
214226
try {
215227
if(channelState.consumersWithManualAck.contains(consumerTag)) {

0 commit comments

Comments
 (0)