I'm trying to upgrade my project from the old 0.9.1 API to the new API that is in the trunk, and I'm having problems with the ThreadPoolFilter.

It keeps wanting to destroy itself when attached to the session filter chain. (I thought before there was a filter chain that was below the session, and then the session filter chain, but it appears that there is only one now, and it is tied to the session?

I am only attaching it on the Acceptor side, using: (there's no example of using it with an Acceptor)

                SocketAcceptorConfig config = new SocketAcceptorConfig();

                config.setReuseAddress( true );
                config.getFilterChain().addFirst( "ThreadPool", 
threadPoolFilter );

followed by

                acceptor.bind( socketAddress, this, config );

.. in a thread dump, I keep seeing:

"Server-2" prio=5 tid=0x00530870 nid=0x182f000 in Object.wait() [0xf1519000..0xf151aad0]
        at java.lang.Object.wait(Native Method)
        at java.lang.Thread.join(Thread.java:1121)
- locked <0x070d0668> (a org.apache.mina.filter.ThreadPoolFilter $Worker) at org.apache.mina.filter.ThreadPoolFilter.destroy (ThreadPoolFilter.java:209) at org.apache.mina.common.support.IoFilterLifeCycleManager.callDestroyIfNec essary(IoFilterLifeCycleManager.java:214) at org.apache.mina.common.support.AbstractIoFilterChain.deregister (AbstractIoFilterChain.java:363) at org.apache.mina.common.support.AbstractIoFilterChain.remove (AbstractIoFilterChain.java:295) - locked <0x070e1738> (a org.apache.mina.transport.socket.nio.support.SocketFilterChain) at org.apache.mina.common.support.AbstractIoFilterChain.clear (AbstractIoFilterChain.java:304) - locked <0x070e1738> (a org.apache.mina.transport.socket.nio.support.SocketFilterChain) at org.apache.mina.common.support.AbstractIoFilterChain $2.sessionClosed(AbstractIoFilterChain.java:168) at org.apache.mina.common.support.AbstractIoFilterChain.callNextSessionClos ed(AbstractIoFilterChain.java:453) at org.apache.mina.common.support.AbstractIoFilterChain.access$600 (AbstractIoFilterChain.java:52) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl $1.sessionClosed(AbstractIoFilterChain.java:742) at org.apache.mina.filter.codec.ProtocolCodecFilter.sessionClosed (ProtocolCodecFilter.java:165) at org.apache.mina.common.support.AbstractIoFilterChain.callNextSessionClos ed(AbstractIoFilterChain.java:453) at org.apache.mina.common.support.AbstractIoFilterChain.access$600 (AbstractIoFilterChain.java:52) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl $1.sessionClosed(AbstractIoFilterChain.java:742) at org.apache.mina.filter.ThreadPoolFilter.processEvent (ThreadPoolFilter.java:687) at org.apache.mina.filter.ThreadPoolFilter$Worker.processEvents (ThreadPoolFilter.java:421) at org.apache.mina.filter.ThreadPoolFilter$Worker.run (ThreadPoolFilter.java:376)

"Server-3" prio=5 tid=0x00530fb0 nid=0x180e800 in Object.wait() [0xf1417000..0xf1418ad0]
        at java.lang.Object.wait(Native Method)
        at java.lang.Thread.join(Thread.java:1121)
- locked <0x070d0668> (a org.apache.mina.filter.ThreadPoolFilter $Worker) at org.apache.mina.filter.ThreadPoolFilter.destroy (ThreadPoolFilter.java:209) at org.apache.mina.common.support.IoFilterLifeCycleManager.callDestroyIfNec essary(IoFilterLifeCycleManager.java:214) at org.apache.mina.common.support.AbstractIoFilterChain.deregister (AbstractIoFilterChain.java:363) at org.apache.mina.common.support.AbstractIoFilterChain.remove (AbstractIoFilterChain.java:295) - locked <0x070d0718> (a org.apache.mina.transport.socket.nio.support.SocketFilterChain) at org.apache.mina.common.support.AbstractIoFilterChain.clear (AbstractIoFilterChain.java:304) - locked <0x070d0718> (a org.apache.mina.transport.socket.nio.support.SocketFilterChain) at org.apache.mina.common.support.AbstractIoFilterChain $2.sessionClosed(AbstractIoFilterChain.java:168) at org.apache.mina.common.support.AbstractIoFilterChain.callNextSessionClos ed(AbstractIoFilterChain.java:453) at org.apache.mina.common.support.AbstractIoFilterChain.access$600 (AbstractIoFilterChain.java:52) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl $1.sessionClosed(AbstractIoFilterChain.java:742) at org.apache.mina.filter.codec.ProtocolCodecFilter.sessionClosed (ProtocolCodecFilter.java:165) at org.apache.mina.common.support.AbstractIoFilterChain.callNextSessionClos ed(AbstractIoFilterChain.java:453) at org.apache.mina.common.support.AbstractIoFilterChain.access$600 (AbstractIoFilterChain.java:52) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl $1.sessionClosed(AbstractIoFilterChain.java:742) at org.apache.mina.filter.ThreadPoolFilter.processEvent (ThreadPoolFilter.java:687) at org.apache.mina.filter.ThreadPoolFilter$Worker.processEvents (ThreadPoolFilter.java:421) at org.apache.mina.filter.ThreadPoolFilter$Worker.run (ThreadPoolFilter.java:376)

"Server-4" prio=5 tid=0x005311f0 nid=0x182f400 in Object.wait() [0xf159a000..0xf159bad0]
        at java.lang.Object.wait(Native Method)
        at java.lang.Thread.join(Thread.java:1121)
- locked <0x070d08f8> (a org.apache.mina.filter.ThreadPoolFilter $Worker) at org.apache.mina.filter.ThreadPoolFilter.destroy (ThreadPoolFilter.java:209) at org.apache.mina.common.support.IoFilterLifeCycleManager.callDestroyIfNec essary(IoFilterLifeCycleManager.java:214) at org.apache.mina.common.support.AbstractIoFilterChain.deregister (AbstractIoFilterChain.java:363) at org.apache.mina.common.support.AbstractIoFilterChain.remove (AbstractIoFilterChain.java:295) - locked <0x070d0a68> (a org.apache.mina.transport.socket.nio.support.SocketFilterChain) at org.apache.mina.common.support.AbstractIoFilterChain.clear (AbstractIoFilterChain.java:304) - locked <0x070d0a68> (a org.apache.mina.transport.socket.nio.support.SocketFilterChain) at org.apache.mina.common.support.AbstractIoFilterChain $2.sessionClosed(AbstractIoFilterChain.java:168) at org.apache.mina.common.support.AbstractIoFilterChain.callNextSessionClos ed(AbstractIoFilterChain.java:453) at org.apache.mina.common.support.AbstractIoFilterChain.access$600 (AbstractIoFilterChain.java:52) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl $1.sessionClosed(AbstractIoFilterChain.java:742) at org.apache.mina.filter.codec.ProtocolCodecFilter.sessionClosed (ProtocolCodecFilter.java:165) at org.apache.mina.common.support.AbstractIoFilterChain.callNextSessionClos ed(AbstractIoFilterChain.java:453) at org.apache.mina.common.support.AbstractIoFilterChain.access$600 (AbstractIoFilterChain.java:52) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl $1.sessionClosed(AbstractIoFilterChain.java:742) at org.apache.mina.filter.ThreadPoolFilter.processEvent (ThreadPoolFilter.java:687) at org.apache.mina.filter.ThreadPoolFilter$Worker.processEvents (ThreadPoolFilter.java:421) at org.apache.mina.filter.ThreadPoolFilter$Worker.run (ThreadPoolFilter.java:376)

"Server-1" prio=5 tid=0x005303e0 nid=0x180ec00 in Object.wait() [0xf1315000..0xf1316ad0]
        at java.lang.Object.wait(Native Method)
        at java.lang.Thread.join(Thread.java:1121)
- locked <0x070d0668> (a org.apache.mina.filter.ThreadPoolFilter $Worker) at org.apache.mina.filter.ThreadPoolFilter.destroy (ThreadPoolFilter.java:209) at org.apache.mina.common.support.IoFilterLifeCycleManager.callDestroyIfNec essary(IoFilterLifeCycleManager.java:214) at org.apache.mina.common.support.AbstractIoFilterChain.deregister (AbstractIoFilterChain.java:363) at org.apache.mina.common.support.AbstractIoFilterChain.remove (AbstractIoFilterChain.java:295) - locked <0x070d0c88> (a org.apache.mina.transport.socket.nio.support.SocketFilterChain) at org.apache.mina.common.support.AbstractIoFilterChain.clear (AbstractIoFilterChain.java:304) - locked <0x070d0c88> (a org.apache.mina.transport.socket.nio.support.SocketFilterChain) at org.apache.mina.common.support.AbstractIoFilterChain $2.sessionClosed(AbstractIoFilterChain.java:168) at org.apache.mina.common.support.AbstractIoFilterChain.callNextSessionClos ed(AbstractIoFilterChain.java:453) at org.apache.mina.common.support.AbstractIoFilterChain.access$600 (AbstractIoFilterChain.java:52) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl $1.sessionClosed(AbstractIoFilterChain.java:742) at org.apache.mina.filter.codec.ProtocolCodecFilter.sessionClosed (ProtocolCodecFilter.java:165) at org.apache.mina.common.support.AbstractIoFilterChain.callNextSessionClos ed(AbstractIoFilterChain.java:453) at org.apache.mina.common.support.AbstractIoFilterChain.access$600 (AbstractIoFilterChain.java:52) at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl $1.sessionClosed(AbstractIoFilterChain.java:742) at org.apache.mina.filter.ThreadPoolFilter.processEvent (ThreadPoolFilter.java:687) at org.apache.mina.filter.ThreadPoolFilter$Worker.processEvents (ThreadPoolFilter.java:421) at org.apache.mina.filter.ThreadPoolFilter$Worker.run (ThreadPoolFilter.java:376)


.. that is, I have 4 threads that all think that they should be destroying the ThreadPoolFilter, and effectively locking my stuff up.

now, seems to me that constantly destroying the ThreadPoolFilter goes against what it should be doing.. even if the system is idle, I would want to have some pooled threads hanging about waiting for some load to occur..

.. to dig deeper, I'm not sure I like the idea of having IoFilter lifecycle automatically managed by reference counting of how many times it is in use.. what if I know better, and I want to have some global filters I create one at startup, and then destroy at shutdown?

-pete

--
[EMAIL PROTECTED] - http://fotap.org/~osi


Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to