* This loop is vulnerable to the race where more than on thread attempts to append a listener.  When one thread succeeds to append a listener, the other thread can dereference it and thus we lose it.
* Also, you are traversing the linked list sequentially, which is potentially slow.  Perhaps we could maintain the reference to the last listener?