You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by mm...@apache.org on 2019/09/06 16:49:22 UTC
[pulsar] branch master updated: Fix deadlock when resetting cursor
(#5139)
This is an automated email from the ASF dual-hosted git repository.
mmerli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new 00fc2e8 Fix deadlock when resetting cursor (#5139)
00fc2e8 is described below
commit 00fc2e8ed90645453115dff733094fef31c2379e
Author: Masahiro Sakamoto <ma...@yahoo-corp.jp>
AuthorDate: Sat Sep 7 01:49:16 2019 +0900
Fix deadlock when resetting cursor (#5139)
---
.../broker/service/persistent/PersistentSubscription.java | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentSubscription.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentSubscription.java
index 99edfbb..20d64ed 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentSubscription.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentSubscription.java
@@ -622,10 +622,14 @@ public class PersistentSubscription implements Subscription {
}
final CompletableFuture<Void> disconnectFuture;
- if (dispatcher != null && dispatcher.isConsumerConnected()) {
- disconnectFuture = dispatcher.disconnectAllConsumers();
- } else {
- disconnectFuture = CompletableFuture.completedFuture(null);
+
+ // Lock the Subscription object before locking the Dispatcher object to avoid deadlocks
+ synchronized (this) {
+ if (dispatcher != null && dispatcher.isConsumerConnected()) {
+ disconnectFuture = dispatcher.disconnectAllConsumers();
+ } else {
+ disconnectFuture = CompletableFuture.completedFuture(null);
+ }
}
disconnectFuture.whenComplete((aVoid, throwable) -> {