From c27f5e40963be1fedd7051a8f399dffc70f89e46 Mon Sep 17 00:00:00 2001 From: Kelvin Date: Sat, 31 Jan 2026 19:23:32 +0100 Subject: [PATCH] Cleanup fixes, v8 locking --- .../engine/packages/PackageBrowser.kt | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/engine/packages/PackageBrowser.kt b/app/src/main/java/com/futo/platformplayer/engine/packages/PackageBrowser.kt index 36639ba4..3afd02e8 100644 --- a/app/src/main/java/com/futo/platformplayer/engine/packages/PackageBrowser.kt +++ b/app/src/main/java/com/futo/platformplayer/engine/packages/PackageBrowser.kt @@ -9,6 +9,7 @@ import android.webkit.WebView import android.webkit.WebViewClient import androidx.collection.emptyLongSet import com.caoccao.javet.annotations.V8Function +import com.caoccao.javet.utils.JavetResourceUtils import com.caoccao.javet.values.reference.V8ValueFunction import com.futo.platformplayer.api.media.platforms.js.JSClient import com.futo.platformplayer.api.media.platforms.js.SourcePluginConfig @@ -89,7 +90,9 @@ class PackageBrowser: V8Package { } @V8Function fun deinitialize() { - _browser?.destroy(); + StateApp.instance.scopeOrNull?.launch(Dispatchers.Main) { + _browser?.destroy(); + } _browser = null; } @@ -140,7 +143,11 @@ class PackageBrowser: V8Package { if(callbackId != null && callback != null) { synchronized(_callbacks) { _callbacks.put(callbackId, { - funcClone?.callVoid(null, arrayOf(it)); + _plugin.busy { + funcClone?.callVoid(null, arrayOf(it)); + } + if (!_plugin.isStopped) + JavetResourceUtils.safeClose(funcClone); }); } } @@ -169,7 +176,12 @@ class PackageBrowser: V8Package { override fun onReceiveValue(value: String?) { Logger.i("PackageBrowser", "Browser run returned: " + (value ?: "")); StateApp.instance.scopeOrNull?.launch(Dispatchers.IO) { - funcClone?.callVoid(null, arrayOf(value)); + Logger.i("PackageBrowser", "Invoking V8 with result (${funcClone != null})"); + _plugin.busy { + funcClone?.callVoid(null, arrayOf(value)); + } + if (!_plugin.isStopped) + JavetResourceUtils.safeClose(funcClone); } } })