aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xmessagebus/src/main/java/com/yahoo/messagebus/Messenger.java31
1 files changed, 26 insertions, 5 deletions
diff --git a/messagebus/src/main/java/com/yahoo/messagebus/Messenger.java b/messagebus/src/main/java/com/yahoo/messagebus/Messenger.java
index 7211e4cead0..2cb2f0967e5 100755
--- a/messagebus/src/main/java/com/yahoo/messagebus/Messenger.java
+++ b/messagebus/src/main/java/com/yahoo/messagebus/Messenger.java
@@ -78,11 +78,7 @@ public class Messenger implements Runnable {
* @param handler The handler to return to.
*/
public void deliverReply(final Reply reply, final ReplyHandler handler) {
- if (destroyed.get()) {
- reply.discard();
- } else {
- handler.handleReply(reply);
- }
+ enqueue(new ReplyTask(reply, handler));
}
/**
@@ -212,6 +208,31 @@ public class Messenger implements Runnable {
void destroy();
}
+ private static class ReplyTask implements Task {
+
+ final ReplyHandler handler;
+ Reply reply;
+
+ ReplyTask(final Reply reply, final ReplyHandler handler) {
+ this.reply = reply;
+ this.handler = handler;
+ }
+
+ @Override
+ public void run() {
+ final Reply reply = this.reply;
+ this.reply = null;
+ handler.handleReply(reply);
+ }
+
+ @Override
+ public void destroy() {
+ if (reply != null) {
+ reply.discard();
+ }
+ }
+ }
+
private static class SyncTask implements Task {
final CountDownLatch latch = new CountDownLatch(1);