--- jsmpp-2.1.0/src/java/main/org/jsmpp/session/AbstractSessionContext.java 2009-07-22 09:40:48.000000000 +0100 +++ jsmpp-2.1.0-m/src/java/main/org/jsmpp/session/AbstractSessionContext.java 2014-04-03 11:30:30.000000000 +0100 @@ -14,7 +14,7 @@ */ package org.jsmpp.session; -import java.util.ArrayList; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.List; import org.jsmpp.bean.BindType; @@ -29,7 +29,7 @@ public abstract class AbstractSessionContext implements SessionContext { private static final Logger logger = LoggerFactory.getLogger(AbstractSessionContext.class); private long lastActivityTimestamp; - private List sessionStateListeners = new ArrayList(); + private List sessionStateListeners = new CopyOnWriteArrayList(); public AbstractSessionContext() { } @@ -64,17 +64,23 @@ public void addSessionStateListener( SessionStateListener l) { - sessionStateListeners.add(l); + synchronized (sessionStateListeners) { + sessionStateListeners.add(l); + } } public void removeSessionStateListener(SessionStateListener l) { - sessionStateListeners.remove(l); + synchronized (sessionStateListeners) { + sessionStateListeners.remove(l); + } } protected void fireStateChanged(SessionState newState, SessionState oldState, Object source) { - for (SessionStateListener l : sessionStateListeners) { - l.onStateChange(newState, oldState, source); + synchronized (sessionStateListeners) { + for (SessionStateListener l : sessionStateListeners) { + l.onStateChange(newState, oldState, source); + } } }