title: Execution process gets halted after certain period with executor still active and its queue count fixed
body: <p>I've configured tcp call in spring integration with following flow:
  Gateway(Future call)====>Splitter(with executor)====>router(to 2 different transformers)===>Outboud-gateway===>Aggregator====>service</p>
  
  <p>Aggregator is configured on receiving the reply because need to make another tcp call based on particular value received from first call, then send to service class.</p>
  
  <p>I am getting problem after certain period of execution (records properly getting persisted) when everything halts, executor active count reaches max pool size and executor queue contains queued messages, and everything just halts forever and need to terminate the main process.</p>
  
  <pre><code>&lt;int:gateway id="clientPositionsGateway" service-interface="com.example.ClientPositionsGateway" async-executor="syncExecutor"&gt;
      &lt;int:method name="fetchClientPositions" request-channel="clientPositionsRequestChannel" reply-channel="clientPositionsResponseChannel"/&gt;
      &lt;int:method name="getSecurityData" request-channel="securityDataRequestChannel" reply-channel="clientPositionsResponseChannel"/&gt;
  &lt;/int:gateway&gt;
  
  &lt;int:channel id="clientPositionsRequestChannel" &gt;
  
  &lt;/int:channel&gt;
  &lt;int:channel id="securityDataRequestChannel" &gt;
  
  &lt;/int:channel&gt;
  
  &lt;int:splitter input-channel="clientPositionsRequestChannel" 
          output-channel="singleClientPositionsRequestChannel" 
  
           /&gt;
  
  &lt;int:channel id="singleClientPositionsRequestChannel" &gt;
      &lt;int:dispatcher task-executor="taskExecutor"/&gt;
  &lt;/int:channel&gt;
  
  &lt;int:recipient-list-router input-channel="singleClientPositionsRequestChannel" &gt;
      &lt;int:recipient channel="singleClientCommQueryChannel" /&gt;
      &lt;int:recipient channel="singleClientTransQueryChannel" /&gt;
  &lt;/int:recipient-list-router&gt;
  
  &lt;int:transformer
      input-channel="singleClientTransQueryChannel"
      output-channel="transQueryHeaderEnricherRequestChannel"
      ref="dmPOSBaseTransQueryTransformer" order="2"/&gt;
  
  &lt;int:header-enricher id="transQueryHeaderEnricher" input-channel="transQueryHeaderEnricherRequestChannel" output-channel="dmQueryRequestChannel" &gt;
       &lt;int:header name="transQueryHeader" value="TRANS_QUERY_HEADER"/&gt;
  &lt;/int:header-enricher&gt;
  
  &lt;int:channel id="transQueryHeaderEnricherRequestChannel" &gt;
  
  &lt;/int:channel&gt;
  
  &lt;int:transformer
      input-channel="singleClientCommQueryChannel"
      output-channel="dmQueryRequestChannel"
      ref="dmPOSBaseCommQueryTransformer" order="1"/&gt;
  
  &lt;int:transformer
      input-channel="securityDataRequestChannel"
      output-channel="secQueryHeaderEnricherRequestChannel"
      ref="dmSECBaseQueryTransformer" /&gt;
  
  &lt;int:header-enricher id="secQueryHeaderEnricher" input-channel="secQueryHeaderEnricherRequestChannel" output-channel="dmQueryRequestChannel" &gt;
       &lt;int:header name="secQueryHeader" value="SEC_QUERY_HEADER"/&gt;
  &lt;/int:header-enricher&gt;        
  
  &lt;int:channel id="singleClientCommQueryChannel" &gt;
  
  &lt;/int:channel&gt;
  &lt;int:channel id="transformSecurityDataRequestChannel" /&gt;
  &lt;int:channel id="singleClientTransQueryChannel" &gt;
  
  &lt;/int:channel&gt;
  &lt;int:channel id="dmQueryRequestChannel" &gt;
  
  &lt;/int:channel&gt;
  
  &lt;int:channel id="secQueryHeaderEnricherRequestChannel" &gt;
  
  &lt;/int:channel&gt;
  
  &lt;ip:tcp-outbound-gateway id="dmServerGateway" 
         request-channel="dmQueryRequestChannel" 
         reply-channel="dmQueryResponseChannel"
         connection-factory="csClient" 
         reply-timeout="3600000" request-timeout="3600000"
         /&gt;
  
  &lt;int:aggregator input-channel="dmQueryResponseChannel"  
      method="aggregateClientPositions"
      ref="clientPositionsAggregator" 
      output-channel="aggregateDataResponseChannel"
      correlation-strategy-expression="headers[id]"
      release-strategy-expression="size() == 1"
      send-partial-result-on-expiry="true" /&gt;
  
  &lt;int:service-activator method="createClientPosition" input-channel="aggregateDataResponseChannel" output-channel="clientPositionsResponseChannel" ref="clientPositionsService" &gt;
  &lt;/int:service-activator&gt;
  
  &lt;int:channel id="dmQueryResponseChannel" &gt;
  
  &lt;/int:channel&gt;
  &lt;int:channel id="securityDataResponseChannel" /&gt;
  &lt;int:channel id="aggregateDataResponseChannel" &gt;
  
  &lt;/int:channel&gt;
  
  &lt;int:channel id="clientPositionsResponseChannel" &gt;
  </code></pre>
  
  <p>Here are gateway interface methods:
  Future> fetchClientPositions(List clientList);<br>
  List getSecurityData(String symbol);</p>