mirror of
https://github.com/vanitasvitae/Smack.git
synced 2024-11-19 02:22:05 +01:00
[disco] Fix memory leak in ServiceDiscoveryManager
The lambda we schedule in 25ms captures a strong reference to the XMPPConnection. However the lambda is part of the scheduled action, which we save in the renewEntityCapsScheduledAction field. This causes a memory leak, since the ServiceDiscoveryManager now holds a strong reference to its XMPPConnection. Fix this by obtaining the strong reference to the XMPPConnection, if one still exists, within the lambda. Fixes SMACK-926. Reported-by: Damian Minkov <damencho@jitsi.org>
This commit is contained in:
parent
f402a9d12d
commit
5b6dd8e3f7
1 changed files with 5 additions and 2 deletions
|
@ -941,9 +941,12 @@ public final class ServiceDiscoveryManager extends Manager {
|
|||
}
|
||||
}
|
||||
|
||||
final XMPPConnection connection = connection();
|
||||
|
||||
renewEntityCapsScheduledAction = scheduleBlocking(() -> {
|
||||
final XMPPConnection connection = connection();
|
||||
if (connection == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
renewEntityCapsPerformed.incrementAndGet();
|
||||
|
||||
DiscoverInfoBuilder discoverInfoBuilder = DiscoverInfo.builder("synthetized-disco-info-response")
|
||||
|
|
Loading…
Reference in a new issue