You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@plc4x.apache.org by "zawodskoj (via GitHub)" <gi...@apache.org> on 2024/01/15 16:40:15 UTC

[I] [Bug]: SerialSocketChannel does not properly close itself

zawodskoj opened a new issue, #1342:
URL: https://github.com/apache/plc4x/issues/1342

   ### What happened?
   
   For some reason, if `Bootstrap.connect(...)` had failed for any reason, EventLoopGroup.shutdownGracefullly does not close channel and keeps `select`-ing it indefinitely, causing a lot of logs to appear
   
   ```
   NioEventLoop -- Selector.select() returned prematurely 512 times in a row; rebuilding Selector org.apache.plc4x.java.transport.serial.SerialPollingSelector@5bb67f2.
   NioEventLoop -- Migrated 1 channel(s) to the new Selector.
   NioEventLoop -- Selector.select() returned prematurely 512 times in a row; rebuilding Selector org.apache.plc4x.java.transport.serial.SerialPollingSelector@4a67eb86.
   NioEventLoop -- Migrated 1 channel(s) to the new Selector.
   NioEventLoop -- Selector.select() returned prematurely 512 times in a row; rebuilding Selector org.apache.plc4x.java.transport.serial.SerialPollingSelector@748a37b5.
   NioEventLoop -- Migrated 1 channel(s) to the new Selector.
   ```
   
   There is a basic repro - it purposely tries to open non-existent serial port and fails: https://gist.github.com/zawodskoj/68987f535bbfe199eeee9be43cf4bf13
   
   There is also a dirty workaround - it is possible to obtain SerialPollingSelector through reflection and invoke `close()` on them, catching meaningless NotImplementedException
   
   ```kotlin
   val getJCh = AbstractNioChannel::class.java.getDeclaredMethod("javaChannel")
   getJCh.isAccessible = true
   val javach = getJCh.invoke(cch) as AbstractInterruptibleChannel
   try {
       javach.close()
   } catch (e: NotImplementedException) {
       // ???
   }
   ```
   
   Soon after another `rebuildSelector0()`, Netty attempts to re-register channel, fails to do so (because it is already closed) and exits the infinite loop
   
   ```
   WARN  io.netty.channel.nio.NioEventLoop -- Selector.select() returned prematurely 512 times in a row; rebuilding Selector org.apache.plc4x.java.transport.serial.SerialPollingSelector@287d3f58.
   WARN  io.netty.channel.nio.NioEventLoop -- Failed to re-register a Channel to the new Selector.
   java.nio.channels.ClosedChannelException: null
   	at java.base/java.nio.channels.spi.AbstractSelectableChannel.register(AbstractSelectableChannel.java:222)
   	at io.netty.channel.nio.NioEventLoop.rebuildSelector0(NioEventLoop.java:467)
   	at io.netty.channel.nio.NioEventLoop.rebuildSelector(NioEventLoop.java:368)
   	at io.netty.channel.nio.NioEventLoop.unexpectedSelectorWakeup(NioEventLoop.java:630)
   	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:578)
   	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
   	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
   	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
   	at java.base/java.lang.Thread.run(Thread.java:840)
   INFO  io.netty.channel.nio.NioEventLoop -- Migrated 0 channel(s) to the new Selector.
   ```
   
   ### Version
   
   v0.11.0
   
   ### Programming Languages
   
   - [X] plc4j
   - [ ] plc4go
   - [ ] plc4c
   - [ ] plc4net
   
   ### Protocols
   
   - [ ] AB-Ethernet
   - [ ] ADS /AMS
   - [ ] BACnet/IP
   - [ ] CANopen
   - [ ] DeltaV
   - [ ] DF1
   - [ ] EtherNet/IP
   - [ ] Firmata
   - [ ] KNXnet/IP
   - [ ] Modbus
   - [ ] OPC-UA
   - [ ] S7


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscribe@plc4x.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [I] [Bug]: SerialSocketChannel does not properly close itself

Posted by "liudianwei (via GitHub)" <gi...@apache.org>.
liudianwei commented on issue #1342:
URL: https://github.com/apache/plc4x/issues/1342#issuecomment-2126869740

   link #1342


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscribe@plc4x.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [I] [Bug]: SerialSocketChannel does not properly close itself

Posted by "chrisdutz (via GitHub)" <gi...@apache.org>.
chrisdutz commented on issue #1342:
URL: https://github.com/apache/plc4x/issues/1342#issuecomment-5291012831

   The core of PLC4J was completely rewritten ... Claude marked this issue as obsolete. Closing it for that ... if you still happen to run into this, please feel free to open a new issue after testing with the 1.0.0 version (-SNAPSHOT or the full version after it's released)
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscribe@plc4x.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [I] [Bug]: SerialSocketChannel does not properly close itself

Posted by "chrisdutz (via GitHub)" <gi...@apache.org>.
chrisdutz closed issue #1342: [Bug]: SerialSocketChannel does not properly close itself
URL: https://github.com/apache/plc4x/issues/1342


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscribe@plc4x.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org