Skip to content

Commit 4fbbd24

Browse files
authored
Merge pull request #959 from permissionlesstech/fix/tor-foreground-restart-delay
Remove dormant wake attempt on Tor foreground restart
2 parents 293d627 + ec54877 commit 4fbbd24

File tree

2 files changed

+10
-60
lines changed

2 files changed

+10
-60
lines changed

bitchat/ViewModels/Extensions/ChatViewModel+Tor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ extension ChatViewModel {
2424
}
2525
}
2626
}
27-
27+
2828
@objc func handleTorWillRestart() {
2929
Task { @MainActor in
3030
self.torRestartPending = true

localPackages/Arti/Sources/TorManager.swift

Lines changed: 9 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@ public final class TorManager: ObservableObject {
290290

291291
public func ensureRunningOnForeground() {
292292
if !allowAutoStart { return }
293+
SecureLogger.debug("TorManager: ensureRunningOnForeground() started", category: .session)
293294
Task.detached(priority: .userInitiated) { [weak self] in
294295
guard let self = self else { return }
295296
let claimed: Bool = await MainActor.run {
@@ -299,54 +300,28 @@ public final class TorManager: ObservableObject {
299300
}
300301
if !claimed { return }
301302

302-
// Try to wake if dormant
303-
if await self.wakeFromDormant() {
304-
await MainActor.run { self.restarting = false }
305-
return
306-
}
307-
308303
// Check if already ready
309304
let alreadyReady = await MainActor.run { self.isReady }
310305
if alreadyReady {
311306
await MainActor.run { self.restarting = false }
312307
return
313308
}
314309

315-
// Restart
310+
// Arti doesn't support dormant/wake (it's a no-op stub), so always do full restart
316311
await self.restartArti()
317312
await MainActor.run { self.restarting = false }
318313
}
319314
}
320315

321316
public func goDormantOnBackground() {
317+
// Arti doesn't support real dormant mode, so just mark as not ready.
318+
// iOS will suspend the runtime anyway. On foreground we do a full restart.
319+
// Clear isStarting so foreground recovery can proceed if bootstrap was interrupted.
322320
SecureLogger.debug("TorManager: goDormantOnBackground() called", category: .session)
323-
Task.detached { [weak self] in
324-
guard let self = self else { return }
325-
let result = arti_go_dormant()
326-
if result == 0 {
327-
SecureLogger.info("TorManager: signalled DORMANT", category: .session)
328-
await MainActor.run {
329-
self.isDormant = true
330-
self.isReady = false
331-
self.socksReady = false
332-
self.isStarting = false
333-
}
334-
} else {
335-
// Dormant not supported, do full shutdown
336-
SecureLogger.warning("TorManager: DORMANT failed; shutting down", category: .session)
337-
_ = arti_stop()
338-
await MainActor.run {
339-
self.isDormant = false
340-
self.isReady = false
341-
self.socksReady = false
342-
self.bootstrapProgress = 0
343-
self.bootstrapSummary = ""
344-
self.isStarting = false
345-
self.didStart = false
346-
self.bootstrapMonitorStarted = false
347-
// Note: Don't clear startedAt - it will be set fresh on next start
348-
}
349-
}
321+
Task { @MainActor in
322+
self.isReady = false
323+
self.socksReady = false
324+
self.isStarting = false
350325
}
351326
}
352327

@@ -379,31 +354,6 @@ public final class TorManager: ObservableObject {
379354
}
380355
}
381356

382-
private func wakeFromDormant() async -> Bool {
383-
let wasDormant = await MainActor.run { self.isDormant }
384-
if !wasDormant { return false }
385-
386-
let result = arti_wake()
387-
if result != 0 { return false }
388-
389-
await MainActor.run {
390-
self.isDormant = false
391-
self.isStarting = true
392-
self.socksReady = false
393-
}
394-
395-
let ready = await waitForSocksReady(timeout: 12.0)
396-
await MainActor.run {
397-
self.socksReady = ready
398-
self.isStarting = !ready
399-
}
400-
401-
if ready {
402-
SecureLogger.info("TorManager: woke from dormant", category: .session)
403-
}
404-
return ready
405-
}
406-
407357
private func restartArti() async {
408358
SecureLogger.debug("TorManager: restartArti() starting", category: .session)
409359
await MainActor.run {

0 commit comments

Comments
 (0)