Spring context deadlock if route stops --------------------------------------
Key: CAMEL-2573 URL: https://issues.apache.org/activemq/browse/CAMEL-2573 Project: Apache Camel Issue Type: Bug Components: camel-jms, camel-spring-integration Affects Versions: 2.2.0 Environment: Linux, Java 1.6 , ActiveMQ 5.3.1. Reporter: Tarjei Huse Attachments: deadlock.log I am a bit unsure if this is an Activemq or Camel bug. What happens is the following: I got a route: @Override public void configure() throws Exception { /* expects byte message of contentitem + header with index : ArrayList<Index> list */ from(incomming) .routeId(routeName) .onException(Exception.class) .log("Stopping route due to exception") .process(new RouteStoppingProccesor(routeName)) //.to(incomming) .end() .unmarshal(new ActiveMqProtobufDataformat()) .bean(new ContentItemTranslator(), "translate") .processRef("SolrPoster") // todo add aggregator here ; } The RouteStoppingProccessor looks like this: public class RouteStoppingProccesor implements Processor { private static Logger log = Logger.getLogger("RouteStopper"); private final String routeName; public RouteStoppingProccesor(String routeName) { this.routeName = routeName; } @Override public void process(Exchange exchange) throws Exception { log.error("\nXXXX: STOP ROUTE: " + routeName + "\n\n"); exchange.getContext().stopRoute(this.routeName); } } When the RouteStoppingProcessor is called, the processor hangs: "DefaultMessageListenerContainer-1" prio=10 tid=0x09607400 nid=0x1bbe in Object.wait() [0x6dbba000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xb1449530> (a java.lang.Object) at java.lang.Object.wait(Object.java:485) at org.springframework.jms.listener.DefaultMessageListenerContainer.doShutdown(DefaultMessageListenerContainer.java:489) - locked <0xb1449530> (a java.lang.Object) at org.springframework.jms.listener.AbstractJmsListeningContainer.shutdown(AbstractJmsListeningContainer.java:211) at org.springframework.jms.listener.AbstractJmsListeningContainer.destroy(AbstractJmsListeningContainer.java:149) at org.apache.camel.component.jms.JmsConsumer.doStop(JmsConsumer.java:64) at org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:81) at org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:100) at org.apache.camel.util.ServiceHelper.stopService(ServiceHelper.java:93) at org.apache.camel.impl.RouteService.stopChildService(RouteService.java:212) at org.apache.camel.impl.RouteService.doStop(RouteService.java:180) at org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:81) at org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:100) at org.apache.camel.impl.DefaultCamelContext.stopRoute(DefaultCamelContext.java:632) - locked <0xb1449570> (a org.apache.camel.spring.SpringCamelContext) at com.scanmine.router.RouteStoppingProccesor.process(RouteStoppingProccesor.java:26) at org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53) at org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82) at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:93) at org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:177) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:143) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:88) at org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49) at org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:228) at org.apache.camel.processor.Pipeline.process(Pipeline.java:74) at org.apache.camel.processor.RedeliveryErrorHandler.deliverToFailureProcessor(RedeliveryErrorHandler.java:333) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:110) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:88) at org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49) at org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:228) at org.apache.camel.processor.Pipeline.process(Pipeline.java:74) at org.apache.camel.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:66) at org.apache.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67) at org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:83) at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:543) at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:482) at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:451) at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:323) at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:261) at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:982) at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:974) at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:876) at java.lang.Thread.run(Thread.java:619) This also causes the whole CamelContext to lock up. The complete output of kill - 3 + a bit of the log is attached. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.