From f39fd44dda9d9152a357ac227307dec81e52d3e1 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Mon, 30 Oct 2023 12:38:35 -0400 Subject: [PATCH] General protection against exceptions that occur on a thread. --- .../onesignal/common/threading/ThreadUtils.kt | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/threading/ThreadUtils.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/threading/ThreadUtils.kt index a55bcb91c0..82c6cc8873 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/threading/ThreadUtils.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/threading/ThreadUtils.kt @@ -1,5 +1,6 @@ package com.onesignal.common.threading +import com.onesignal.debug.internal.logging.Logging import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext @@ -41,11 +42,16 @@ fun suspendifyBlocking(block: suspend () -> Unit) { */ fun suspendifyOnMain(block: suspend () -> Unit) { thread { - runBlocking { - withContext(Dispatchers.Main) { - block() + try { + runBlocking { + withContext(Dispatchers.Main) { + block() + } } } + catch (e: Exception) { + Logging.error("Exception on thread with switch to main", e) + } } } @@ -57,8 +63,13 @@ fun suspendifyOnMain(block: suspend () -> Unit) { */ fun suspendifyOnThread(priority: Int = -1, block: suspend () -> Unit) { thread(priority = priority) { - runBlocking { - block() + try { + runBlocking { + block() + } + } + catch (e: Exception) { + Logging.error("Exception on thread", e) } } } @@ -71,8 +82,13 @@ fun suspendifyOnThread(priority: Int = -1, block: suspend () -> Unit) { */ fun suspendifyOnThread(name: String, priority: Int = -1, block: suspend () -> Unit) { thread(name = name, priority = priority) { - runBlocking { - block() + try { + runBlocking { + block() + } + } + catch (e: Exception) { + Logging.error("Exception on thread '${name}'", e) } } }