aboutsummaryrefslogtreecommitdiffstats
path: root/messagebus
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-04-13 16:24:32 +0200
committerGitHub <noreply@github.com>2019-04-13 16:24:32 +0200
commit7a90091e9f2c6e36ac2a099e0ba8ab53ddc63059 (patch)
treeb606a2b2cccee063012cc09e2f4811d4c2d83913 /messagebus
parent3ff8dfe1d7418e90abb4a92e18d7f79ea74679f1 (diff)
Revert "Revert "Revert "Reply in own thread"""
Diffstat (limited to 'messagebus')
-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);