Skip to content

NPE in NettyConnectListener #2124

Description

@doom369

Async client version - 3.0.3
Netty version - 4.2.7.Final
Java 21/25

2:55:36.956 WARN  - An exception was thrown by org.asynchttpclient.netty.channel.NettyChannelConnector$1.operationComplete()
java.lang.NullPointerException: Cannot invoke "org.asynchttpclient.netty.timeout.TimeoutsHolder.setResolvedRemoteAddress(java.net.InetSocketAddre
ss)" because "timeoutsHolder" is null
        at org.asynchttpclient.netty.channel.NettyConnectListener.onSuccess(NettyConnectListener.java:101)
        at org.asynchttpclient.netty.channel.NettyChannelConnector$1.onSuccess(NettyChannelConnector.java:91)
        at org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete(SimpleChannelFutureListener.java:28)
        at org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete(SimpleChannelFutureListener.java:22)
        at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:603)
        at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:596)
        at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:572)
        at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:505)
        at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:649)
        at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:638)
        at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:118)
        at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)
        at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.fulfillConnectPromise(AbstractEpollChannel.java:707)
        at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.finishConnect(AbstractEpollChannel.java:745)
        at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.epollOutReady(AbstractEpollChannel.java:611)
        at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.handle(AbstractEpollChannel.java:472)
        at io.netty.channel.epoll.EpollIoHandler$DefaultEpollIoRegistration.handle(EpollIoHandler.java:317)
        at io.netty.channel.epoll.EpollIoHandler.processReady(EpollIoHandler.java:514)
        at io.netty.channel.epoll.EpollIoHandler.run(EpollIoHandler.java:459)

And for another env:

02:15:04.776 WARN  - An exception was thrown by org.asynchttpclient.netty.channel.NettyChannelConnector$1.operationComplete()
java.lang.NullPointerException: Cannot invoke "org.asynchttpclient.netty.timeout.TimeoutsHolder.setResolvedRemoteAddress(java.net.InetSocketAddress)" because "timeoutsHolder" is null
        at org.asynchttpclient.netty.channel.NettyConnectListener.onSuccess(NettyConnectListener.java:100)
        at org.asynchttpclient.netty.channel.NettyChannelConnector$1.onSuccess(NettyChannelConnector.java:91)
        at org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete(SimpleChannelFutureListener.java:28)
        at org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete(SimpleChannelFutureListener.java:22)
        at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:603)
        at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:596)
        at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:572)
        at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:505)
        at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:649)
        at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:638)
        at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:118)
        at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)
        at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:350)
        at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:385)
        at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.handle(AbstractNioChannel.java:432)
        at io.netty.channel.nio.NioIoHandler$DefaultNioRegistration.handle(NioIoHandler.java:381)
        at io.netty.channel.nio.NioIoHandler.processSelectedKey(NioIoHandler.java:587)
        at io.netty.channel.nio.NioIoHandler.processSelectedKeysOptimized(NioIoHandler.java:562)
        at io.netty.channel.nio.NioIoHandler.processSelectedKeys(NioIoHandler.java:503)

Activity

  1. hyperxpro commented on Nov 11, 2025

    @hyperxpro
    Member

    Thanks for the report. I will have a look shortly.

  2. added a commit that references this issue on Nov 26, 2025
    a177bd3
  3. jaredstehler commented on May 7, 2026

    @jaredstehler

    the published fix for this actually doesn't solve the original issue;

    java.lang.NullPointerException: Cannot invoke "org.asynchttpclient.netty.timeout.TimeoutsHolder.setResolvedRemoteAddress(java.net.InetSocketAddress)" because "timeoutsHolder" is null

    we need a null guard for the timeoutsHolder var, bc future.getTimeoutsHolder(); can return null (i.e. if cancelTimeouts() is called)

    i'm still seeing this error with ahc 3.0.9 (netty 4.2.9):

    2026-05-07 11:16:30.692  [niohttp-chirp-2] WARN  i.n.util.concurrent.DefaultPromise - An exception was thrown by org.asynchttpclient.netty.channel.NettyChannelConnector$1.operationComplete()
    java.lang.NullPointerException: Cannot invoke "org.asynchttpclient.netty.timeout.TimeoutsHolder.setResolvedRemoteAddress(java.net.InetSocketAddress)" because "timeoutsHolder" is null
    	at org.asynchttpclient.netty.channel.NettyConnectListener.onSuccess(NettyConnectListener.java:102)
    	at org.asynchttpclient.netty.channel.NettyChannelConnector$1.onSuccess(NettyChannelConnector.java:91)
    	at org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete(SimpleChannelFutureListener.java:28)
    	at org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete(SimpleChannelFutureListener.java:22)
    	at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:604)
    	at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:597)
    	at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:573)
    	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:506)
    	at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:650)
    	at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:639)
    	at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:119)
    	at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)
    	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:350)
    	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:385)
    	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.handle(AbstractNioChannel.java:432)
    	at io.netty.channel.nio.NioIoHandler$DefaultNioRegistration.handle(NioIoHandler.java:388)
    	at io.netty.channel.nio.NioIoHandler.processSelectedKey(NioIoHandler.java:596)
    	at io.netty.channel.nio.NioIoHandler.processSelectedKeysPlain(NioIoHandler.java:541)
    	at io.netty.channel.nio.NioIoHandler.processSelectedKeys(NioIoHandler.java:514)
    	at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:484)
    	at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225)
    	at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196)
    	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1195)
    	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    	at java.base/java.lang.Thread.run(Thread.java:1474)
    

    @hyperxpro

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions