mirror of
https://github.com/bulwarkmail/native.git
synced 2026-10-31 08:06:36 +00:00
Every background push kept the app awake for the full 30 s timeout of the BulwarkPushTask headless task, however quickly the task was done. AppRegistry reports a finished task through the native HeadlessJsTaskSupport module, and React Native 0.81 registers that module only for the old bridge (CoreModulesPackage); the bridgeless runtime's CoreReactPackage leaves it out. JS could never say it was done, so the service, or the job, and its wake lock waited for the timeout. BulwarkHeadlessJsTaskSupportModule provides the module under the same name when the app runs bridgeless. The push path also leaked a wake lock now and then. startHeadlessTask called HeadlessJsTaskService.acquireWakeLockNow on the FCM worker thread while the service took the same static lock on the main thread. The method is not thread-safe, so both could create a lock, and the one that was overwritten stayed held. The FCM thread now takes its own wake lock, timed at 10 s, and the service drops it as soon as it holds React Native's. Measured on the API 35 emulator with the R8 release build: - push handled by the job: 30,000 ms before, 75-155 ms now - push handled by the service: the service ran 31 s before, it is gone within a second now - `com.facebook.react.i` wake lock still held 5 s after a push: 2 of 4 pushes before, 0 of 8 now