Hi, Freeman

I will try to set this value to -1 and then test again.

but from the deadlock trace, it seems that when one connection expired, it
will call the tick and then call expire Method, but in tick method, first,
it will lock the _lock and then call expire:

        while (true)
        {
            try
            {
                synchronized (_lock)
                {
                    task= _head._next;
                    if (task==_head || task._timestamp>expiry)
                        break;
                    task.unlink();
                    task._expired=true;
                    task.expire();
                }
                
                task.expired();
            }
            catch(Throwable th)
            {
                Log.warn(Log.EXCEPTION,th);
            }
        }

and in expire Method, it will lock SelectConnector itself.

            synchronized (this)
            {
                redispatch=_parked && _pending && !_resumed;
                _parked=false;
            }

the other thread just call the resume Method, it will first lock the
SelectConnector itself and then it will lock the selectSet which seems same
with _lock

                synchronized (selectSet)
                {
                    this.cancel();   
                }

then deadlock happen......

Regards.
Leng Yong.

--
View this message in context: 
http://servicemix.396122.n5.nabble.com/http-BC-not-receive-any-http-request-tp5453027p5453326.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to