Browse Source

just never call maybeNetwork() from ui thread

B. Petersen 4 years ago
parent
commit
904c57426a
1 changed files with 7 additions and 1 deletions
  1. 7 1
      deltachat-ios/AppDelegate.swift

+ 7 - 1
deltachat-ios/AppDelegate.swift

@@ -370,7 +370,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD
 
         // we're in background, run IO for a little time
         dcContext.maybeStartIo()
-        dcContext.maybeNetwork()
+
+        // maybeNetwork() shall not be called in ui thread;
+        // even if we're in backround now, app may be starting just now and maybeNetwork() will block in that case
+        // (series of performFetchWithCompletionHandler/applicationWillEnterForeground are not rare)
+        DispatchQueue.global(qos: .background).async { [weak self] in
+            self?.dcContext.maybeNetwork()
+        }
 
         DispatchQueue.main.asyncAfter(deadline: .now() + 10) { [weak self] in
             logger.info("⬅️ finishing fetch")