Android jsi + QuickJS: worker close() from its message handler aborts in JS_FreeRuntime (gc_obj_list not empty)
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 48/100
Rechercherichtung
Start from the Android worker teardown path used when close() is called inside onmessage, then compare it with the parent terminate() path and the napi worker teardown. Trace which runtime-owned JSValues or native caches remain when JS_FreeRuntime runs. Done means the reproduced Java class, gc(), and self-close sequence exits cleanly with QuickJS and jsi.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Summary
With the jsi binding layer on QuickJS, the app aborts when a worker calls close() from inside its onmessage handler after it has used Java classes. QuickJS asserts in JS_FreeRuntime:
Assertion failed: list_empty(&rt->gc_obj_list)
That means GC objects are still alive when the worker's runtime is freed. Something still holds JSValues owned by that runtime, such as a native cache or object map that isn't released before the runtime is freed. Other combinations don't hit it:
| Combination | Result |
|---|---|
| napi + QuickJS, same test | pass |
jsi + QuickJS, terminate() from the parent |
pass |
Reproduce
- Build
platforms/android/test-appwith QuickJS and the jsi layer:
./gradlew :app:assembleDebug -Pengine=QUICKJS -Pns_engine=QUICKJS -PbindingLayer=jsi -PonlyArm64 -PuseKotlin=true - Use a worker that touches a Java class, forces a collection, and then closes itself from the handler:
onmessage = () => { new java.lang.Object(); gc(); close(); }; - From the main runtime, create the worker and
postMessageto it. - The app aborts in
JS_FreeRuntimeon every run. A collection inside the handler is required; withoutgc(), it depends on the heap state.
This was found while testing #92. It reproduced in 3 of 3 runs with #92 applied and in 2 of 2 runs on the unmodified base branch, so #92 does not cause it.
Expected
A worker that closes itself is torn down cleanly. Every value NativeScript holds in the runtime is released before the runtime is freed, as it is when the parent calls terminate() and in the napi tree.
Environment
- Branch:
android-react-nativeat 64c7fed0 - Emulator: Android API 36, arm64
- Engine: QuickJS (quickjs-ng), with the jsi binding layer
- Vorherrschende Sprache
- C++
- Sterne
- 27
- Forks
- 4
- Ø Merge
- 16 Std. 48 Min.
- Gemergte PRs (30 T.)
- 4
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus NativeScript/runtimes
-
bug
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
NativeScript/runtimes#100 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 45/100
NativeScript/runtimes#99 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 4/5 1-2 Tage Anfängerfreundlichkeit 55/100
NativeScript/runtimes#98 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 53/100
NativeScript/runtimes#97 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
NativeScript/runtimes#93 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in NativeScript/runtimes
Ähnliche Issues
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 66/100
madskristensen/FileIcons#385 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
microsoft/SysmonCommon#26 ·
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 90/100
espressif/esp-matter#1913 ·
-
bug priority: low
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
chipsalliance/verible#2644 ·