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: [email protected]
For additional commands, e-mail: [email protected]