[ https://issues.apache.org/jira/browse/ARTEMIS-4771?focusedWorklogId=919605&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-919605 ]
ASF GitHub Bot logged work on ARTEMIS-4771: ------------------------------------------- Author: ASF GitHub Bot Created on: 15/May/24 22:10 Start Date: 15/May/24 22:10 Worklog Time Spent: 10m Work Description: clebertsuconic commented on code in PR #4932: URL: https://github.com/apache/activemq-artemis/pull/4932#discussion_r1602306503 ########## artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/AMQPLargeMessageWriter.java: ########## @@ -170,16 +170,26 @@ private void resume() { } private void tryDelivering() { + + final Delivery localDelivery = delivery; + final MessageReference localReference = reference; + final LargeBodyReader localBodyReader = largeBodyReader; + + if (localDelivery == null || localReference == null || localBodyReader == null) { + logger.debug("Write got closed before tryDelivering was called"); + return; + } Review Comment: https://github.com/apache/activemq-artemis/blob/14e83faa1bf5523d63755ec54f42cbc1d21affc6/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/AMQPLargeMessageWriter.java#L126-L134 so.. one thread is in resetClose.. another thread is on the tryDeliver... closed is only set to true at the end of the statement... as a result you could the NPE. you may say set closed first...but still I don't feel like this is completely atomic without added synchronization... however I don't want synchrnoization here.. just a local copy and checking it should be enough for me. I plan to add a test on this. Issue Time Tracking ------------------- Worklog Id: (was: 919605) Time Spent: 50m (was: 40m) > NPE between AMQPLargeMessageWriter::tryDelivering and resetClose > ---------------------------------------------------------------- > > Key: ARTEMIS-4771 > URL: https://issues.apache.org/jira/browse/ARTEMIS-4771 > Project: ActiveMQ Artemis > Issue Type: Bug > Reporter: Clebert Suconic > Priority: Major > Time Spent: 50m > Remaining Estimate: 0h > > This is using RedHat's bits: > java.lang.NullPointerException: Cannot invoke > "org.apache.qpid.proton.engine.Delivery.getTag()" because "this.delivery" is > null > at > org.apache.activemq.artemis.protocol.amqp.proton.AMQPLargeMessageWriter.tryDelivering(AMQPLargeMessageWriter.java:174) > ~[artemis-amqp-protocol-2.33.0.redhat-00009.jar:2.33.0.redhat-00009] > at > io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173) > ~[netty-common-4.1.108.Final-redhat-00001.jar:4.1.108.Final-redhat-00001] > at > io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166) > [netty-common-4.1.108.Final-redhat-00001.jar:4.1.108.Final-redhat-00001] > at > io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) > [netty-common-4.1.108.Final-redhat-00001.jar:4.1.108.Final-redhat-00001] > at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:413) > [netty-transport-classes-epoll-4.1.108.Final-redhat-00001.jar:4.1.108.Final-redhat-00001] > at > io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) > [netty-common-4.1.108.Final-redhat-00001.jar:4.1.108.Final-redhat-00001] > at > io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) > [netty-common-4.1.108.Final-redhat-00001.jar:4.1.108.Final-redhat-00001] > at > org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118) > [artemis-commons-2.33.0.redhat-00009.jar:2.33.0.redhat-00009] -- This message was sent by Atlassian Jira (v8.20.10#820010)