[ 
https://issues.apache.org/jira/browse/AMQCPP-487?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13679793#comment-13679793
 ] 

Timothy Bish commented on AMQCPP-487:
-------------------------------------

How about trying this fix out so that we avoid problems with starvation in the 
composite task runner altogether.  

{noformat}

////////////////////////////////////////////////////////////////////////////////
bool CompositeTaskRunner::iterate() {

    synchronized(&tasks) {

        for (int i = 0; i < tasks.size(); ++i) {
            CompositeTask* task = tasks.pop();

            if (task->isPending()) {
                task->iterate();
                tasks.addLast(task);

                // Always return true, so that we check again for any of
                // the other tasks that might now be pending.
                return true;
            } else {
                tasks.addLast(task);
            }
        }
    }

    return false;
}
{noformat}
                
> CMS FailoverTransport Leaks Socket Descriptors
> ----------------------------------------------
>
>                 Key: AMQCPP-487
>                 URL: https://issues.apache.org/jira/browse/AMQCPP-487
>             Project: ActiveMQ C++ Client
>          Issue Type: Bug
>          Components: Transports
>    Affects Versions: 3.6.0
>            Reporter: Kevin Urciolo
>            Assignee: Timothy Bish
>
> See the discussion by following the link below.
> http://activemq.2283324.n4.nabble.com/CMS-3-6-Socket-Descriptor-Leak-With-Failover-td4667966.html
> The FailoverTransport.cpp taskRunner includes the FailoverTransport and 
> CloseTransports tasks.  The FailoverTransport is added first, and appears to 
> always be pending.  This means the taskRunner always executes the iterate on 
> the FailoverTransport and the CloseTransports tasks are never run, which 
> causes a build up of socket descriptors (and threads).
> We worked around the issue by adding the CloseTransportsTask to the 
> taskRunner first.  This allows the CompositeTaskRunner to iterate the 
> CloseTransportsTask when there is work, and then switching back to iterating 
> the FailoverTransport.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to