[
https://issues.apache.org/jira/browse/QPID-1515?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Marnie McCormack updated QPID-1515:
-----------------------------------
Component/s: Java Client
Adding component
> [Java Client] Issues with dispatcher threading
> ----------------------------------------------
>
> Key: QPID-1515
> URL: https://issues.apache.org/jira/browse/QPID-1515
> Project: Qpid
> Issue Type: Bug
> Components: Java Client
> Affects Versions: M3
> Reporter: Marnie McCormack
> Assignee: Rafael H. Schloming
>
> I believe there are several issues in the dispatcher code that need to be
> rectified, so if we close this JIRA (was comment in QPID-823) we should open
> at least one new one to cover these issues:
> - The dispatcher thread uses it's own _closed variable which shadows the
> session's. It's unclear why this is so, and at least some of the leaked
> dispatcher threads observed would have exited had the dispatcher code
> reference the session's closed variable rather than its own.
> - The fact that the dispatcher thread is instantiated on demand seems both
> unnecessary and accident prone. This is also responsible for some of the
> leaked threads observed, particularly in combination with the above issue
> where a dispatcher thread is created on demand after the session is closed.
> - The dispatcher object itself has code on it that would be better as
> private methods on the session. Because this code is on the dispatcher class,
> the dispatcher has to be re-instantiated just to call it. This was the cause
> of the leaked dispatcher threads as Arnaud describes above.
> - The code in confirmConsumerCancelled(...) that checks if the dispatcher
> is null and the starts it if necessary is not thread safe. This should either
> be synchronized, or eliminated entirely by not instantiating the dispatcher
> thread on demand and/or moving rejectPending(...) out to the session so it
> can be called without access to the dispatcher object.
> - As mentioned above, interrupt() is not a safe way to shutdown the
> dispatcher thread. As coded it could at least hypothetically interrupt the
> application while it's in the middle of a message handler, and, by causing
> the thread to exit after removing a message from the queue, but prior to
> handling or releasing the message, it may cause the client to drop messages
> should have either been handled or released.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.