Subject: Re: [EGIT PATCH 02/11] Use Set instead of array to keep track of change listeners

From: Tor Arne Vestbø <[email-masked]>
Date: Thu, 05 Feb 2009 17:36:43 +0100

Shawn O. Pearce wrote:
> Tor Arne Vestbø <[email-masked]> wrote:
>> +	public static synchronized void removeRepositoryChangeListener(
>> +			final RepositoryChangeListener objectThatCares) {
>> +		repositoryChangeListeners.remove(objectThatCares);
>>  	}
>>  
>>  	/**
>> @@ -131,13 +133,8 @@ public static synchronized void addRepositoryChangeListener(
>>  	 *            the repository which has had changes occur within it.
>>  	 */
>>  	static void fireRepositoryChanged(final RepositoryMapping which) {
>> -		final RepositoryChangeListener[] e = getRepositoryChangeListeners();
>> -		for (int k = e.length - 1; k >= 0; k--)
>> -			e[k].repositoryChanged(which);
>> -	}
>> -
>> -	private static synchronized RepositoryChangeListener[] getRepositoryChangeListeners() {
>> -		return repositoryChangeListeners;
>> +		for (RepositoryChangeListener listener : repositoryChangeListeners)
>> +			listener.repositoryChanged(which);
> 
> See anything wrong here, like that the Set can be modified while
> GitProjectData's class lock is held, but its being read here without
> any locking?

You're perfectly right. New patch coming up!

Tor Arne