[jboss-cvs] JBoss Messaging SVN: r2327 - trunk/src/main/org/jboss/jms/server/endpoint.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Feb 15 14:53:01 EST 2007
Author: timfox
Date: 2007-02-15 14:53:01 -0500 (Thu, 15 Feb 2007)
New Revision: 2327
Modified:
trunk/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java
trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
Log:
http://jira.jboss.org/jira/browse/JBMESSAGING-836
Modified: trunk/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java 2007-02-15 18:56:33 UTC (rev 2326)
+++ trunk/src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java 2007-02-15 19:53:01 UTC (rev 2327)
@@ -356,18 +356,23 @@
return;
}
+ //We clone to avoid deadlock http://jira.jboss.org/jira/browse/JBMESSAGING-836
+ Map sessionsClone;
synchronized (sessions)
{
- for(Iterator i = sessions.values().iterator(); i.hasNext(); )
- {
- ServerSessionEndpoint sess = (ServerSessionEndpoint)i.next();
-
- sess.localClose();
- }
-
- sessions.clear();
+ sessionsClone = new HashMap(sessions);
}
+ for(Iterator i = sessionsClone.values().iterator(); i.hasNext(); )
+ {
+ ServerSessionEndpoint sess = (ServerSessionEndpoint)i.next();
+
+ sess.localClose();
+ }
+
+ sessions.clear();
+
+
synchronized (temporaryDestinations)
{
for(Iterator i = temporaryDestinations.iterator(); i.hasNext(); )
@@ -702,16 +707,21 @@
private void setStarted(boolean s) throws Throwable
{
+ //We clone to avoid deadlock http://jira.jboss.org/jira/browse/JBMESSAGING-836
+ Map sessionsClone = null;
+
synchronized(sessions)
{
- for (Iterator i = sessions.values().iterator(); i.hasNext(); )
- {
- ServerSessionEndpoint sd = (ServerSessionEndpoint)i.next();
-
- sd.setStarted(s);
- }
- started = s;
+ sessionsClone = new HashMap(sessions);
}
+
+ for (Iterator i = sessionsClone.values().iterator(); i.hasNext(); )
+ {
+ ServerSessionEndpoint sd = (ServerSessionEndpoint)i.next();
+
+ sd.setStarted(s);
+ }
+ started = s;
}
private void processTransaction(ClientTransaction txState,
Modified: trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java 2007-02-15 18:56:33 UTC (rev 2326)
+++ trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java 2007-02-15 19:53:01 UTC (rev 2327)
@@ -826,26 +826,36 @@
if (trace) log.trace(this + " close()");
+ //We clone to avoid deadlock http://jira.jboss.org/jira/browse/JBMESSAGING-836
+ Map consumersClone;
synchronized (consumers)
- {
- for( Iterator i = consumers.values().iterator(); i.hasNext(); )
- {
- ((ServerConsumerEndpoint)i.next()).localClose();
- }
-
- consumers.clear();
+ {
+ consumersClone = new HashMap(consumers);
}
+ for( Iterator i = consumersClone.values().iterator(); i.hasNext(); )
+ {
+ ((ServerConsumerEndpoint)i.next()).localClose();
+ }
+
+ consumers.clear();
+
+
+ //We clone to avoid deadlock http://jira.jboss.org/jira/browse/JBMESSAGING-836
+ Map browsersClone;
synchronized (browsers)
- {
- for( Iterator i = browsers.values().iterator(); i.hasNext(); )
- {
- ((ServerBrowserEndpoint)i.next()).localClose();
- }
-
- browsers.clear();
+ {
+ browsersClone = new HashMap(browsers);
}
+ for( Iterator i = browsersClone.values().iterator(); i.hasNext(); )
+ {
+ ((ServerBrowserEndpoint)i.next()).localClose();
+ }
+
+ browsers.clear();
+
+
//Now cancel any remaining deliveries in reverse delivery order
//Note we don't maintain order using a LinkedHashMap since then we lose
//concurrency since we would have to lock it exclusively
@@ -953,21 +963,25 @@
*/
void setStarted(boolean s) throws Throwable
{
+ //We clone to prevent deadlock http://jira.jboss.org/jira/browse/JBMESSAGING-836
+ Map consumersClone;
synchronized(consumers)
{
- for(Iterator i = consumers.values().iterator(); i.hasNext(); )
+ consumersClone = new HashMap(consumers);
+ }
+
+ for(Iterator i = consumersClone.values().iterator(); i.hasNext(); )
+ {
+ ServerConsumerEndpoint sce = (ServerConsumerEndpoint)i.next();
+ if (s)
{
- ServerConsumerEndpoint sce = (ServerConsumerEndpoint)i.next();
- if (s)
- {
- sce.start();
- }
- else
- {
- sce.stop();
- }
+ sce.start();
}
- }
+ else
+ {
+ sce.stop();
+ }
+ }
}
// Protected ------------------------------------------------------------------------------------
More information about the jboss-cvs-commits
mailing list