From c817346ee39287b89199dbf0b6ee5a4335382f87 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Fri, 7 Jul 2017 12:26:12 -0400 Subject: [PATCH] =?UTF-8?q?Fix=20=E2=80=9Ctimer=20circular=20reference?= =?UTF-8?q?=E2=80=9D=20leaks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit // FREEBIE --- Signal/src/Jobs/MessageFetcherJob.swift | 4 +++- Signal/src/Signal-Bridging-Header.h | 1 + Signal/src/ViewControllers/CallViewController.swift | 9 +++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Signal/src/Jobs/MessageFetcherJob.swift b/Signal/src/Jobs/MessageFetcherJob.swift index 759666eba..4fb0e100f 100644 --- a/Signal/src/Jobs/MessageFetcherJob.swift +++ b/Signal/src/Jobs/MessageFetcherJob.swift @@ -62,7 +62,9 @@ class MessageFetcherJob: NSObject { // Do not use in production. func startRunLoop(timeInterval: Double) { Logger.error("\(TAG) Starting message fetch polling. This should not be used in production.") - timer = Timer.scheduledTimer(timeInterval: timeInterval, target: self, selector: #selector(runAsync), userInfo: nil, repeats: true) + timer = WeakTimer.scheduledTimer(timeInterval: timeInterval, target: self, userInfo: nil, repeats: true) {[weak self] _ in + self?.runAsync() + } } func stopRunLoop() { diff --git a/Signal/src/Signal-Bridging-Header.h b/Signal/src/Signal-Bridging-Header.h index 91f3d71b7..ad38b4392 100644 --- a/Signal/src/Signal-Bridging-Header.h +++ b/Signal/src/Signal-Bridging-Header.h @@ -42,6 +42,7 @@ #import #import #import +#import #import #import #import diff --git a/Signal/src/ViewControllers/CallViewController.swift b/Signal/src/ViewControllers/CallViewController.swift index a08630280..b8fdcccc8 100644 --- a/Signal/src/ViewControllers/CallViewController.swift +++ b/Signal/src/ViewControllers/CallViewController.swift @@ -698,11 +698,12 @@ class CallViewController: UIViewController, CallObserver, CallServiceObserver, R if callState == .connected { if callDurationTimer == nil { let kDurationUpdateFrequencySeconds = 1 / 20.0 - callDurationTimer = Timer.scheduledTimer(timeInterval: TimeInterval(kDurationUpdateFrequencySeconds), + callDurationTimer = WeakTimer.scheduledTimer(timeInterval: TimeInterval(kDurationUpdateFrequencySeconds), target:self, - selector:#selector(updateCallDuration), userInfo:nil, - repeats:true) + repeats:true) {[weak self] _ in + self?.updateCallDuration() + } } } else { callDurationTimer?.invalidate() @@ -710,7 +711,7 @@ class CallViewController: UIViewController, CallObserver, CallServiceObserver, R } } - func updateCallDuration(timer: Timer?) { + func updateCallDuration() { updateCallStatusLabel(callState: call.state) }