diff --git a/src/net/java/sip/communicator/service/protocol/media/MediaAwareCallPeer.java b/src/net/java/sip/communicator/service/protocol/media/MediaAwareCallPeer.java index 95a7afae6..364855b7e 100644 --- a/src/net/java/sip/communicator/service/protocol/media/MediaAwareCallPeer.java +++ b/src/net/java/sip/communicator/service/protocol/media/MediaAwareCallPeer.java @@ -570,10 +570,18 @@ public void removeStreamSoundLevelListener(SoundLevelListener listener) * members sound level. * * @param listener the ConferenceMembersSoundLevelListener to add + * @throws NullPointerException if listener is null */ public void addConferenceMembersSoundLevelListener( - ConferenceMembersSoundLevelListener listener) + ConferenceMembersSoundLevelListener listener) { + /* + * XXX The uses of the method at the time of this writing rely on being + * able to add a null listener so make it a no-op here. + */ + if (listener == null) + return; + synchronized (conferenceMemberAudioLevelListeners) { if (conferenceMemberAudioLevelListeners.size() == 0) @@ -597,13 +605,12 @@ public void addConferenceMembersSoundLevelListener( * remove */ public void removeConferenceMembersSoundLevelListener( - ConferenceMembersSoundLevelListener listener) + ConferenceMembersSoundLevelListener listener) { synchronized (conferenceMemberAudioLevelListeners) { - conferenceMemberAudioLevelListeners.remove(listener); - - if (conferenceMemberAudioLevelListeners.size() == 0) + if (conferenceMemberAudioLevelListeners.remove(listener) + && (conferenceMemberAudioLevelListeners.size() == 0)) { // if this was the last listener then we also remove ourselves // as a CSRC audio level listener from the handler so that we