[ https://issues.apache.org/jira/browse/DIRMINA-777?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Emmanuel Lécharny reopened DIRMINA-777: --------------------------------------- Reopening the issue. There is a clear race condition when writing some data in the {{sessionOpened}} handler, which could lead to a {{read()}} call to be locked if the message is written before. It's easy to reproduce by adding a {{Thread.sleep(10)}} *before* the {{read()}} call. I don't see any easy fix for this problem... > IoSessionConfig.setUseReadOperation(true) doesn't seem to work > -------------------------------------------------------------- > > Key: DIRMINA-777 > URL: https://issues.apache.org/jira/browse/DIRMINA-777 > Project: MINA > Issue Type: Bug > Components: Core > Affects Versions: 2.0.0-RC1 > Environment: Mac OS X 10.6.2, Java 1.6, Android SDK > Reporter: Matt Huggins > Priority: Blocker > Labels: config, session, synchronized > Fix For: 2.0.8 > > > I'm attempting to perform a synchronous write/read in a demux-based client > application with MINA 2.0 RC1, but it seems to get stuck. Here is my code: > {code} > public boolean login(final String username, final String password) { > // block inbound messages > session.getConfig().setUseReadOperation(true); > // send the login request > final LoginRequest loginRequest = new LoginRequest(username, password); > final WriteFuture writeFuture = session.write(loginRequest); > writeFuture.awaitUninterruptibly(); > if (writeFuture.getException() != null) { > session.getConfig().setUseReadOperation(false); > return false; > } > // retrieve the login response > final ReadFuture readFuture = session.read(); > readFuture.awaitUninterruptibly(); > if (readFuture.getException() != null) { > session.getConfig().setUseReadOperation(false); > return false; > } > // stop blocking inbound messages > session.getConfig().setUseReadOperation(false); > // determine if the login info provided was valid > final LoginResponse loginResponse = > (LoginResponse)readFuture.getMessage(); > return loginResponse.getSuccess(); > } > {code} > I can see on the server side that the LoginRequest object is retrieved, and a > LoginResponse message is sent. On the client side, the > DemuxingProtocolCodecFactory receives the response, but after throwing in > some logging, I can see that the client gets stuck on the call to > `readFuture.awaitUninterruptibly() `. > I can't for the life of me figure out why it is stuck here based upon my own > code. I properly set the read operation to true on the session config, > meaning that messages should be blocked. However, it seems as if the message > no longer exists by time I try to read response messages synchronously. -- 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