Skip to content

Commit 812bf7e

Browse files
authored
Removing finalize method altogether. (#388)
* Removing finalize method altogether. * Chaging vesion. * Addin finalize only for MessagingFactory as connection needs to be disposed properly. * Another fix to avoid stalling in finalize waiting for object to close.
1 parent 8d12d31 commit 812bf7e

File tree

6 files changed

+28
-20
lines changed

6 files changed

+28
-20
lines changed

azure-servicebus/azure-servicebus.pom

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>com.microsoft.azure</groupId>
66
<artifactId>azure-servicebus</artifactId>
7-
<version>1.2.17</version>
7+
<version>1.2.18</version>
88
<licenses>
99
<license>
1010
<name>The MIT License (MIT)</name>

azure-servicebus/src/main/java/com/microsoft/azure/servicebus/MessageReceiver.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.UUID;
1616
import java.util.concurrent.CompletableFuture;
1717
import java.util.concurrent.ConcurrentHashMap;
18+
import java.util.concurrent.ScheduledFuture;
1819

1920
import org.apache.qpid.proton.amqp.transport.ReceiverSettleMode;
2021
import org.apache.qpid.proton.amqp.transport.SenderSettleMode;
@@ -52,7 +53,8 @@ class MessageReceiver extends InitializableEntity implements IMessageReceiver, I
5253
private CoreMessageReceiver internalReceiver = null;
5354
private boolean isInitialized = false;
5455
private MessageBrowser browser = null;
55-
private int messagePrefetchCount;
56+
private int messagePrefetchCount;
57+
private ScheduledFuture<?> requestResponseLockTokenPruner = null;
5658

5759
private final ConcurrentHashMap<UUID, Instant> requestResponseLockTokensToLockTimesMap;
5860

@@ -425,6 +427,9 @@ protected CompletableFuture<Void> onClose() {
425427
} else {
426428
TRACE_LOGGER.info("Closing MessageReceiver to entity '{}'", this.entityPath);
427429
}
430+
if (this.requestResponseLockTokenPruner != null) {
431+
this.requestResponseLockTokenPruner.cancel(false);
432+
}
428433
CompletableFuture<Void> closeReceiverFuture = this.internalReceiver.closeAsync();
429434

430435
return closeReceiverFuture.thenComposeAsync((v) ->
@@ -624,8 +629,12 @@ public CompletableFuture<Collection<IMessage>> peekBatchAsync(long fromSequenceN
624629

625630
private void schedulePruningRequestResponseLockTokens() {
626631
// Run it every 1 hour
627-
Timer.schedule(new Runnable() {
632+
this.requestResponseLockTokenPruner = Timer.schedule(new Runnable() {
628633
public void run() {
634+
if (MessageReceiver.this.getIsClosed()) {
635+
MessageReceiver.this.requestResponseLockTokenPruner.cancel(true);
636+
return;
637+
}
629638
Instant systemTime = Instant.now();
630639
Entry<UUID, Instant>[] copyOfEntries = (Entry<UUID, Instant>[]) MessageReceiver.this.requestResponseLockTokensToLockTimesMap.entrySet().toArray();
631640
for (Entry<UUID, Instant> entry : copyOfEntries) {

azure-servicebus/src/main/java/com/microsoft/azure/servicebus/primitives/ClientEntity.java

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -138,17 +138,10 @@ protected final void throwIfClosed(Throwable cause)
138138
}
139139

140140
@Override
141-
protected void finalize()
142-
{
143-
try {
144-
if(!this.isClosed)
145-
{
146-
this.close();
147-
}
148-
149-
super.finalize();
150-
} catch (Throwable e) {
151-
//Ignore
152-
}
153-
}
141+
protected void finalize() throws Throwable {
142+
if (!this.getIsClosingOrClosed()) {
143+
this.closeAsync();
144+
}
145+
super.finalize();
146+
}
154147
}

azure-servicebus/src/main/java/com/microsoft/azure/servicebus/primitives/CoreMessageReceiver.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,8 +1051,12 @@ public void onEvent() {
10511051

10521052
this.cancelSASTokenRenewTimer();
10531053
this.closeRequestResponseLink();
1054-
this.updateStateRequestsTimeoutChecker.cancel(false);
1055-
this.returnMessagesLoopRunner.cancel(false);
1054+
if (this.updateStateRequestsTimeoutChecker != null) {
1055+
this.updateStateRequestsTimeoutChecker.cancel(false);
1056+
}
1057+
if (this.returnMessagesLoopRunner != null) {
1058+
this.returnMessagesLoopRunner.cancel(false);
1059+
}
10561060
}
10571061
}
10581062

azure-servicebus/src/main/java/com/microsoft/azure/servicebus/primitives/RequestResponseLink.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,9 @@ public void onEvent()
555555
protected CompletableFuture<Void> onClose() {
556556
TRACE_LOGGER.info("Closing requestresponselink to {} by closing both internal sender and receiver links.", this.linkPath);
557557
this.cancelSASTokenRenewTimer();
558-
return this.amqpSender.closeAsync().thenComposeAsync((v) -> this.amqpReceiver.closeAsync(), MessagingFactory.INTERNAL_THREAD_POOL);
558+
CompletableFuture<Void> senderCloseFuture = this.amqpSender.closeAsync();
559+
CompletableFuture<Void> receiverCloseFuture = this.amqpReceiver.closeAsync();
560+
return CompletableFuture.allOf(senderCloseFuture, receiverCloseFuture);
559561
}
560562

561563
private static void scheduleLinkCloseTimeout(CompletableFuture<Void> closeFuture, Duration timeout, String linkName)

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<proton-j-version>0.31.0</proton-j-version>
1414
<junit-version>4.12</junit-version>
1515
<slf4j-version>1.7.0</slf4j-version>
16-
<client-current-version>1.2.17</client-current-version>
16+
<client-current-version>1.2.18</client-current-version>
1717
</properties>
1818

1919
<modules>

0 commit comments

Comments
 (0)