Author: bodewig Date: Thu Jun 19 01:15:14 2008 New Revision: 669421 URL: http://svn.apache.org/viewvc?rev=669421&view=rev Log: finer grained synchronization of current Thread task handling, only lock the threads table but do so consistently
Modified: ant/core/trunk/src/main/org/apache/tools/ant/Project.java Modified: ant/core/trunk/src/main/org/apache/tools/ant/Project.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/Project.java?rev=669421&r1=669420&r2=669421&view=diff ============================================================================== --- ant/core/trunk/src/main/org/apache/tools/ant/Project.java (original) +++ ant/core/trunk/src/main/org/apache/tools/ant/Project.java Thu Jun 19 01:15:14 2008 @@ -176,10 +176,11 @@ private ClassLoader coreLoader = null; /** Records the latest task to be executed on a thread. */ - private Map/*<Thread,Task>*/ threadTasks = Collections.synchronizedMap(new WeakHashMap()); + private final Map/*<Thread,Task>*/ threadTasks = + Collections.synchronizedMap(new WeakHashMap()); /** Records the latest task to be executed on a thread group. */ - private Map/*<ThreadGroup,Task>*/ threadGroupTasks + private final Map/*<ThreadGroup,Task>*/ threadGroupTasks = Collections.synchronizedMap(new WeakHashMap()); /** @@ -2271,13 +2272,15 @@ * @param task the task to be registered. * @since Ant 1.5 */ - public synchronized void registerThreadTask(Thread thread, Task task) { - if (task != null) { - threadTasks.put(thread, task); - threadGroupTasks.put(thread.getThreadGroup(), task); - } else { - threadTasks.remove(thread); - threadGroupTasks.remove(thread.getThreadGroup()); + public void registerThreadTask(Thread thread, Task task) { + synchronized(threadTasks) { + if (task != null) { + threadTasks.put(thread, task); + threadGroupTasks.put(thread.getThreadGroup(), task); + } else { + threadTasks.remove(thread); + threadGroupTasks.remove(thread.getThreadGroup()); + } } } @@ -2289,15 +2292,17 @@ * null if no task is registered. */ public Task getThreadTask(Thread thread) { - Task task = (Task) threadTasks.get(thread); - if (task == null) { - ThreadGroup group = thread.getThreadGroup(); - while (task == null && group != null) { - task = (Task) threadGroupTasks.get(group); - group = group.getParent(); + synchronized(threadTasks) { + Task task = (Task) threadTasks.get(thread); + if (task == null) { + ThreadGroup group = thread.getThreadGroup(); + while (task == null && group != null) { + task = (Task) threadGroupTasks.get(group); + group = group.getParent(); + } } + return task; } - return task; }