Thanks for reply. Sorry for not clear it. Basically, we will get the number of idleWorkers 0 or more than 0, if idleWorkers = 0, that's meaning no work is idle, we should add workers if it's necessary; if idleWorkers > 0 , that's meaning there are idle works, no necessary to add workers. Do I get the point? Let's back to the original, while the MINA starting. At this time, the num of idleWorker == 0, therefor we call addWorkerIfNecessary() method when task is coming, because of idleWorker == 0, we do addWorker and increase the num of idle at line 259 (version 2.0.16). so idleWorker == 1 at this time, the first worker be fired and start running, we enter the infinite loop, and decrease the num of idleWorker to 0 at line 686(version 2.0.16), basically that's we expected, but there is exception throw by runTasks(), the finally code is executed at line 707, and increase the idleWorker to 1 again, the infinite 'for' loop drop out because we don't catch the exception, the outer try...finally code executed at line 712 removed the worker. Let's sort out ideas, by now, the idleWorker == 1 and there is no worker is running, is right? so the mina fall into fake dead.
Please let me know I did the right investigation. 2017-01-13 0:11 GMT+08:00 Emmanuel Lécharny <elecha...@gmail.com>: > Hi ! > > > sorry for the delayed response, was busy... > > > I'm not sure I understand : if you get an exception in the runTasks() > call, the 'finally' code is executed, and the number of idle worker is > incremented, no matter what... > > > Can you check that ? > > -- > > Emmanuel Lecharny > > Symas.com > directory.apache.org > >