Dupont jean wrote:
> Hi there,
>
> I'm having an issue with a protocol handler i wrote. The handler acquires a 
> lock in the first stages of the protocol communication, then multiple 
> messages are exchanged between client and server and when the client decides 
> to put an end to the communication server should release the acquired lock. 
> The problem is multiple threads are used to service the protocol and the 
> thread that releases the lock isn't the one that acquired the lock which 
> results in an IllegalStateMonitorException. 
>
> How can i configure Mina to use a thread pool but to always use the same 
> thread in a session as this will prevent the lock problem ?
>
> Here's the code i actually use to configure mina :
>
> ---
>         ByteBuffer.setUseDirectBuffers(false);
>         ByteBuffer.setAllocator(new SimpleByteBufferAllocator());
>         
>         IoAcceptor acceptor = new SocketAcceptor(Runtime.getRuntime()
>                 .availableProcessors() + 1, Executors.newCachedThreadPool());
>         IoAcceptorConfig config = new SocketAcceptorConfig();
>         ((SocketAcceptorConfig) config).setReuseAddress(true);
>         DefaultIoFilterChainBuilder chain = config.getFilterChain();
>         
>         chain.addLast("codec", new ProtocolCodecFilter(
>                 new TextLineCodecFactory(Charset.forName("UTF-8"))));
>
>         acceptor.bind(new InetSocketAddress(PORT), new 
> Pop3ProtocolHandler(true),
>                 config);
> ---
>   
What is it that you are protecting with your lock and what kind of lock are you 
using? One of the java.util.concurrent.locks.Lock
implementations?

You seem to be implementing a POP3 server. Are you perhaps using the
lock for preventing concurrent access to a POP3 user's mailbox? 

If possible, please post the code of your IoHandler implementation.



/Niklas

-- 
Niklas Therning
www.spamdrain.net

Reply via email to