smart-socket icon indicating copy to clipboard operation
smart-socket copied to clipboard

aio-core 1.5.31 版本会提示这个错

Open zkname opened this issue 2 years ago • 2 comments

不确定是哪里多线程同时操作了?

是不是需要selectionKey.isValid() 先判断一下?

java.nio.channels.CancelledKeyException
        at sun.nio.ch.SelectionKeyImpl.ensureValid(SelectionKeyImpl.java:73)
        at sun.nio.ch.SelectionKeyImpl.interestOps(SelectionKeyImpl.java:77)
        at org.smartboot.socket.enhance.EnhanceAsynchronousChannelGroup.removeOps(EnhanceAsynchronousChannelGroup.java:122)
        at org.smartboot.socket.enhance.EnhanceAsynchronousServerChannel.doRead(EnhanceAsynchronousServerChannel.java:273)
        at org.smartboot.socket.enhance.EnhanceAsynchronousChannelGroup.lambda$new$0(EnhanceAsynchronousChannelGroup.java:76)
        at org.smartboot.socket.enhance.EnhanceAsynchronousChannelGroup$Worker.run(EnhanceAsynchronousChannelGroup.java:219)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

zkname avatar Sep 27 '23 10:09 zkname

有没有复现代码

smthing avatar Sep 27 '23 10:09 smthing

有没有复现代码

生产环境运行的啊。 EnhanceAsynchronousChannelGroup.java:122 判断一下 key是否有效,改成这样可以吗?

    public static void removeOps(SelectionKey selectionKey, int opt) {
        if (selectionKey.isValid() && (selectionKey.interestOps() & opt) != 0) {
            selectionKey.interestOps(selectionKey.interestOps() & ~opt);
        }
    }

zkname avatar Oct 08 '23 03:10 zkname