From f65aaff4e39445b504f980db509bbbc680c327d0 Mon Sep 17 00:00:00 2001 From: Whale Choi Date: Sun, 29 Sep 2024 13:31:06 +0800 Subject: [PATCH] api: spawn CallbackList use UiThreadHandler::runAndWait executor (#2096) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ![jsexception](https://github.com/user-attachments/assets/e8a4744d-bd0a-40bf-869c-def915b66075) Because the exit callback in js cleans up the ChildProcess, when the last callback of stdout is executed after the exit callback, an error like “emitData ReferenceError: spawn_callback_1727358276092_68 is not defined” will occur. --- .../java/me/weishu/kernelsu/ui/webui/WebViewInterface.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebViewInterface.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebViewInterface.kt index aabd7038..394c237f 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebViewInterface.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebViewInterface.kt @@ -14,6 +14,7 @@ import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat import com.topjohnwu.superuser.CallbackList import com.topjohnwu.superuser.ShellUtils +import com.topjohnwu.superuser.internal.UiThreadHandler import me.weishu.kernelsu.ui.util.listModules import me.weishu.kernelsu.ui.util.createRootShell import me.weishu.kernelsu.ui.util.withNewRootShell @@ -110,13 +111,13 @@ class WebViewInterface(val context: Context, private val webView: WebView, priva } } - val stdout = object : CallbackList() { + val stdout = object : CallbackList(UiThreadHandler::runAndWait) { override fun onAddElement(s: String) { emitData("stdout", s) } } - val stderr = object : CallbackList() { + val stderr = object : CallbackList(UiThreadHandler::runAndWait) { override fun onAddElement(s: String) { emitData("stderr", s) }