I just committed a fix to trunk (pulling back to 2.4.x now as well). When you get a chance, can you give it a try to see if it fixes your issue? Threading things like these are hard to really test.
Dan On Friday, August 19, 2011 2:32:03 PM xuhb wrote: > Maybe it is becuase before chain.wait() return, the sync of chain will be > re-locked, so it will block untill chain.resume() finished; > ----- Original Message ----- > From: "xuhb" <x...@tongtech.com> > To: <users@cxf.apache.org> > Sent: Friday, August 19, 2011 1:39 PM > Subject: Re: A mysteriously deadlock of CXF OnewayProcessorInterceptor > > > > > Sorry, I foget post the issue link: > > > > https://issues.apache.org/jira/browse/CXF-3750 > > > > ----- Original Message ----- > > From: "xuhb" <x...@tongtech.com> > > To: <users@cxf.apache.org> > > Sent: Friday, August 19, 2011 1:34 PM > > Subject: A mysteriously deadlock of CXF OnewayProcessorInterceptor > > > > > > > >> Hi: > >> > >> Recently when I am checking/testing CXF , there is a > >> mysteriously deadlock of CXF Oneway Process; Normally CXF > >> engine will invoke the one way bussiness logical asynchronized > >> ,, so the servlet handle will finished and return back to > >> servlet engine immediately; >> > >> > >> > >> But sometime, I noticed that the servlet > >> handle(JettyHTTPHandler) at server side doesn't return back to > >> servlet engine(Jetty) immediately , it will waiting until the > >> asynchrouse business logical finished; After dig source of > >> CXF, I find it 's relate to OnewayProcessorInterceptor;But > >> until now I can only show when will the deadlock occurs, but I > >> still can not explain why;>> > >> > >> Following is details: > >> OnewayProcessInterceptor.handleMessage{ > >> synchronized (chain) { > >> message.getExchange().get(Bus.class).getExtension(WorkQueueManager.cla > >> ss) .getAutomaticWorkQueue().execute(new Runnable() { > >> > >> public void run() { > >> synchronized (chain) { > >> > >> System.out.println("--notify all"); > >> chain.notifyAll(); > >> > >> } > >> > >> chain.resume(); //if chain.resume is called before chain.wait > >> finished , the dead lock will occurs; It seems as > >> chain.resume is synchronized, so it will relock on chain > >> object, so the chain.wait() will deadlocked (... I feel > >> confused for this, because jdk doesn't say so...) ;After > >> chain.resume finished, locking on chain is released, deadlock > >> of chain.wait() is also released; but I don't think this is > >> problem of CXF , maybe it's jdk's problem ?? I feels confused; >> > >> } > >> > >> }); > >> > >> System.out.println("--wait begin"); > >> chain.wait(20); > >> System.out.println("--wait end"); > >> > >> } > >> } > >> syncrhonized PhaseInterceptorChain.resume(){ > >> > >> System.out.println("--api chain resume"); > >> > >> ... > >> > >> } > >> > >> if the execute sequence as following, every thing is ok. there is no > >> dead lock; >> > >> chain.wait enter > >> chian.notify invoked > >> chain.wait return; > >> chain.resume(); //resume also synchronzed on chain object; > >> > >> > >> if the execute sequence as following , dead lock will occurs: > >> > >> chain.wait enter > >> chain.notify > >> chain.resume// ..now waiting on chain will blocked until > >> chain.resume finished(release sync on chain) chain.wait > >> return; > >> > >> > >> following dump on console indicate the above sequence: > >> > >> No DeadLock dump : > >> --wait begin > >> --notify all > >> --wait end > >> --api chain resume > >> product service begin Fri Aug 19 12:10:28 CST 2011 //a lone time(10 > >> seconds) one way business logical begin product service end Fri Aug > >> 19 12:10:38 CST 2011 .//a lone time(10 seconds) one way business > >> logical end; > >> > >> DeadLock Dump: > >> --wait begin > >> --notify all > >> --api chain resume > >> product service begin Fri Aug 19 12:10:40 CST 2011 > >> product service end Fri Aug 19 12:10:50 CST 2011 > >> --wait end > >> > >> > >> Until now I am not sure if problem is CXF's or JDK's, or something > >> which I don't know cause such a deadlock; I also wrote a simple > >> program to simulate the execute sequnce which causeddead lock in > >> CXF, but the simple program never dead lock; > >> I tried CXF 2.3.3 version && Jetty transport && (JDK1.5_22 || JDK > >> 1.6_17) && Windows XP system; > >> I also post this question as a JIRA issue: -- Daniel Kulp dk...@apache.org http://dankulp.com/blog Talend - http://www.talend.com