You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2011/11/25 16:05:51 UTC
svn commit: r1206202 -
/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/FutureResponseImpl.java
Author: norman
Date: Fri Nov 25 15:05:50 2011
New Revision: 1206202
URL: http://svn.apache.org/viewvc?rev=1206202&view=rev
Log:
Don't hold lock while notify listeners
Modified:
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/FutureResponseImpl.java
Modified: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/FutureResponseImpl.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/FutureResponseImpl.java?rev=1206202&r1=1206201&r2=1206202&view=diff
==============================================================================
--- james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/FutureResponseImpl.java (original)
+++ james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/FutureResponseImpl.java Fri Nov 25 15:05:50 2011
@@ -32,8 +32,8 @@ import org.slf4j.LoggerFactory;
*/
public class FutureResponseImpl implements FutureResponse{
- private final static Logger LOGGER = LoggerFactory.getLogger(FutureResponseImpl.class);
-
+ private final static Logger LOGGER = LoggerFactory.getLogger(FutureResponseImpl.class);
+
protected Response response;
private List<ResponseListener> listeners;
private int waiters;
@@ -64,8 +64,10 @@ public class FutureResponseImpl implemen
@Override
public synchronized void removeListener(ResponseListener listener) {
- if (listeners != null) {
- listeners.remove(listener);
+ if (!isReady()) {
+ if (listeners != null) {
+ listeners.remove(listener);
+ }
}
}
@@ -100,14 +102,21 @@ public class FutureResponseImpl implemen
return response.toString();
}
- public synchronized void setResponse(Response response) {
- if (!isReady()) {
- this.response = response;
-
- if (waiters > 0) {
- notifyAll();
+ public void setResponse(Response response) {
+ boolean fire = false;
+ synchronized (this) {
+ if (!isReady()) {
+ this.response = response;
+ fire = true;
+
+ if (waiters > 0) {
+ notifyAll();
+ }
}
- for (ResponseListener listener: listeners) {
+ }
+
+ if (fire) {
+ for (ResponseListener listener : listeners) {
try {
listener.onResponse(this);
} catch (Throwable e) {
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org