I've just spotted that the acceptor is not correctly disposed.
I've managed to get the test running succesfully by adding the
following code just after server.suspend()

        for (Listener listener :
server.getServerContext().getListeners().values()) {
            if (listener instanceof NioListener) {
                Field field = listener.getClass().getDeclaredField("acceptor");
                field.setAccessible(true);
                NioSocketAcceptor acceptor = (NioSocketAcceptor)
field.get(listener);
                Method method =
AbstractPollingIoAcceptor.class.getDeclaredMethod("dispose0");
                method.setAccessible(true);
                method.invoke(acceptor);
            }
        }

Which is about callling the dispose0() method of the NioSocketAcceptor.
This method looks like:

    protected IoFuture dispose0() throws Exception {
        unbind();
        if (!disposalFuture.isDone()) {
            startupAcceptor();
            wakeup();
        }
        return disposalFuture;
    }

So I guess what we're missing is a call to:
            startupAcceptor();
            wakeup();
somewhere.
I'm not too familiar with mina internals, so I'm not sure where this
methods should be called or if it makes any sense to call those after
an unbind.


2009/2/24 Emmanuel Lecharny <elecha...@apache.org>:
> On Tue, Feb 24, 2009 at 4:36 PM, Guillaume Nodet <gno...@gmail.com> wrote:
>> Maybe not the suspend call directly, but as a side effect.
>> If the server is not started, the correct expceiton if thrown by the client.
>> If the server is suspended and restarted, then the client connects correctly.
>
> yeah, probably. I suspect that the acceptor is not stopped correctly.
> --
> Regards,
> Cordialement,
> Emmanuel Lécharny
> www.iktek.com
>



-- 
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://fusesource.com

Reply via email to