-
Bug
-
Resolution: Done
-
Major
-
JBossAS-4.2.3.GA, JBossAS-5.0.0.CR2
-
None
The timerServiceMap in org.jboss.ejb.txtimer.EJBTimerServiceImpl should be synchronized[1].
Original code: // Maps the timedObjectId to TimerServiceImpl objects
private Map timerServiceMap = Collections.synchronizedMap(new HashMap());
public void removeTimerService(ObjectName containerId, boolean keepState) throws IllegalStateException
{
// remove all timers with the given containerId
Iterator it = timerServiceMap.entrySet().iterator();
while (it.hasNext())
{
Map.Entry entry = (Map.Entry)it.next();
TimedObjectId key = (TimedObjectId)entry.getKey();
TimerServiceImpl timerService = (TimerServiceImpl)entry.getValue();
if (containerId.equals(key.getContainerId()))
}
}
Fixed:
public void removeTimerService(ObjectName containerId, boolean keepState) throws IllegalStateException
{
// remove all timers with the given containerId
synchronized(timerServiceMap)
{
Iterator it = timerServiceMap.entrySet().iterator();
while (it.hasNext())
{
Map.Entry entry = (Map.Entry)it.next();
TimedObjectId key = (TimedObjectId)entry.getKey();
TimerServiceImpl timerService = (TimerServiceImpl)entry.getValue();
if (containerId.equals(key.getContainerId()))
}
}
}
[1]http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collections.html#synchronizedMap(java.util.Map
- is incorporated by
-
JBPAPP-1227 JBAS-5999 - EJBTimerServiceImpl timerServiceMap access should be synchronized
- Resolved