Loading
Use CopyOnWriteArrayList for listeners.
- We were previously using a list of Listener objects, specifically a LinkedList, and synchronizing on the list to maintain thread-safety. - This cl replaces the LinkedList with a CopyOnWriteArrayList, which is specifically made for this kind of situation. A bit more background: - During the notify period, we had the classic anti-pattern of holding the lock whilst calling foreign methods (the listener onServiceCompleted methods). - It's very evil to call foreign methods with a lock held, since this can easily lead to deadlock. In this case, if any of our Listener implementations or any future Listener implementations yet to be written were to block until some other thread registers or unregisters a listener, we will have deadlock. - CopyOnWriteArrayList needs no explicit synchronization - see its javadoc. Change-Id: If2251e740a9f266e28956ac5acc52054debb3461