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.