[ https://issues.apache.org/jira/browse/DIRMINA-1169?focusedWorklogId=859103&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-859103 ]
ASF GitHub Bot logged work on DIRMINA-1169: ------------------------------------------- Author: ASF GitHub Bot Created on: 26/Apr/23 08:57 Start Date: 26/Apr/23 08:57 Worklog Time Spent: 10m Work Description: elecharny commented on PR #35: URL: https://github.com/apache/mina/pull/35#issuecomment-1523035898 Will check that for 2.1 and 2.2 this week. Sorry for the delay... Issue Time Tracking ------------------- Worklog Id: (was: 859103) Time Spent: 50m (was: 40m) > BindException on Java >= 11 due to race condition in AbstractPollingIoAcceptor > ------------------------------------------------------------------------------ > > Key: DIRMINA-1169 > URL: https://issues.apache.org/jira/browse/DIRMINA-1169 > Project: MINA > Issue Type: Bug > Affects Versions: 2.0.23, 2.1.6, 2.2.1 > Reporter: Thomas Wolf > Priority: Major > Time Spent: 50m > Remaining Estimate: 0h > > See also SSHD-1256. > The main acceptor loop does basically (somewhat simplified): > {code:java} > while (selectable) { > registerHandles(); // Process registration queue: add new sockets (from > bind()) to the selector with OP_ACCEPT, fulfills their open futures > int selected = select(); > if (/* nothing to do */) { > break; // and end the thread; higher layers will create a new one if > needed > } > if (selected > 0) { > processHandles(selectedHandles()); // Handle and hand off new connections > } > unregisterHandles(); // Process cancel queue: cancel SelectionKey, close > ServerSocketChannel, fulfill the cancel future > } > {code} > With Java 11, unbinding a {{ServerSocketChannel}} changed: > * [JDK-8214430|https://bugs.openjdk.org/browse/JDK-8214430] > * [Java 11 Release > Notes|https://www.oracle.com/java/technologies/javase/11-relnote-issues.html#JDK-8198562] > Essentially the unbind gives up the socket only at the next {{select()}} > call. This causes two problems in Apache MINA's acceptor: > * The unbind future is set "done" before the socket is actually released. > * If a new binding for one of the unbound sockets is registered before that > {{select()}} has been done, {{registerHandles()}} gets a {{BindException}} > ("address already in use"). > So for Java >= 11, the code must ensure that there is a {{select()}} between > processing unbindings and processing new bindings, and the unbind futures > must be set "done" only after that {{select()}}. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@mina.apache.org For additional commands, e-mail: dev-h...@mina.apache.org