You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Trustin Lee (JIRA)" <ji...@apache.org> on 2008/03/10 08:47:51 UTC
[jira] Created: (DIRMINA-543) Incorrect sessionCreated event order
in VmPipe transport
Incorrect sessionCreated event order in VmPipe transport
--------------------------------------------------------
Key: DIRMINA-543
URL: https://issues.apache.org/jira/browse/DIRMINA-543
Project: MINA
Issue Type: Bug
Components: Transport
Affects Versions: 2.0.0-M1, 1.1.6, 1.0.9
Reporter: Trustin Lee
Fix For: 1.0.10, 1.1.7, 2.0.0-M2
The following unit test method fails because sessionOpened can be called before sessionCreated.
public void testSessionCreated() throws Exception {
final Semaphore semaphore = new Semaphore(0);
final StringBuffer stringBuffer = new StringBuffer();
VmPipeAcceptor vmPipeAcceptor = new VmPipeAcceptor();
final VmPipeAddress vmPipeAddress = new VmPipeAddress(12345);
vmPipeAcceptor.setHandler(new IoHandlerAdapter() {
@Override
public void sessionCreated(IoSession session) throws Exception {
// pretend we are doing some time-consuming work. For
// performance reasons, you would never want to do time
// consuming work in sessionCreated.
// However, this increases the likelihood of the timing bug.
Thread.sleep(1000);
stringBuffer.append("A");
}
@Override
public void sessionOpened(IoSession session) throws Exception {
stringBuffer.append("B");
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
stringBuffer.append("C");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
stringBuffer.append("D");
semaphore.release();
}
});
vmPipeAcceptor.bind(vmPipeAddress);
final VmPipeConnector vmPipeConnector = new VmPipeConnector();
vmPipeConnector.getFilterChain().addLast("executor", new ExecutorFilter());
vmPipeConnector.setHandler(new IoHandlerAdapter() {
@Override
public void sessionOpened(IoSession session) throws Exception {
session.write(IoBuffer.wrap(new byte[1]));
}
});
ConnectFuture connectFuture = vmPipeConnector.connect(vmPipeAddress).awaitUninterruptibly();
Thread.sleep(3000);
connectFuture.getSession().close();
semaphore.tryAcquire(1, TimeUnit.SECONDS);
vmPipeAcceptor.unbind(vmPipeAddress);
Assert.assertEquals("ABCD", stringBuffer.toString());
}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Closed: (DIRMINA-543) Incorrect sessionCreated event order
in VmPipe transport
Posted by "Trustin Lee (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/DIRMINA-543?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Trustin Lee closed DIRMINA-543.
-------------------------------
Resolution: Fixed
Assignee: Trustin Lee
Fixed - a lock is acquired explicitly when sessionCreated() is invoked so other events are not fired until sessionCreated() finishes its job.
> Incorrect sessionCreated event order in VmPipe transport
> --------------------------------------------------------
>
> Key: DIRMINA-543
> URL: https://issues.apache.org/jira/browse/DIRMINA-543
> Project: MINA
> Issue Type: Bug
> Components: Transport
> Affects Versions: 1.0.9, 1.1.6, 2.0.0-M1
> Reporter: Trustin Lee
> Assignee: Trustin Lee
> Fix For: 1.0.10, 1.1.7, 2.0.0-M2
>
>
> The following unit test method fails because sessionOpened can be called before sessionCreated.
> public void testSessionCreated() throws Exception {
> final Semaphore semaphore = new Semaphore(0);
> final StringBuffer stringBuffer = new StringBuffer();
> VmPipeAcceptor vmPipeAcceptor = new VmPipeAcceptor();
> final VmPipeAddress vmPipeAddress = new VmPipeAddress(12345);
> vmPipeAcceptor.setHandler(new IoHandlerAdapter() {
> @Override
> public void sessionCreated(IoSession session) throws Exception {
> // pretend we are doing some time-consuming work. For
> // performance reasons, you would never want to do time
> // consuming work in sessionCreated.
> // However, this increases the likelihood of the timing bug.
> Thread.sleep(1000);
> stringBuffer.append("A");
> }
> @Override
> public void sessionOpened(IoSession session) throws Exception {
> stringBuffer.append("B");
> }
> @Override
> public void messageReceived(IoSession session, Object message)
> throws Exception {
> stringBuffer.append("C");
> }
>
> @Override
> public void sessionClosed(IoSession session) throws Exception {
> stringBuffer.append("D");
> semaphore.release();
> }
> });
> vmPipeAcceptor.bind(vmPipeAddress);
> final VmPipeConnector vmPipeConnector = new VmPipeConnector();
> vmPipeConnector.getFilterChain().addLast("executor", new ExecutorFilter());
> vmPipeConnector.setHandler(new IoHandlerAdapter() {
> @Override
> public void sessionOpened(IoSession session) throws Exception {
> session.write(IoBuffer.wrap(new byte[1]));
> }
> });
> ConnectFuture connectFuture = vmPipeConnector.connect(vmPipeAddress).awaitUninterruptibly();
> Thread.sleep(3000);
> connectFuture.getSession().close();
> semaphore.tryAcquire(1, TimeUnit.SECONDS);
> vmPipeAcceptor.unbind(vmPipeAddress);
> Assert.assertEquals("ABCD", stringBuffer.toString());
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.