Android: per-runtime statics are read and written from runtime threads without a lock
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 45/100
Piste de recherche
Start by reading the listed Android N-API and JSI files, then compare their shared static maps and APP_ROOT_FOLDER_PATH assignments with the tns::ConcurrentMap usage mentioned in the issue and the Hermes env_to_jsr_mutex guard. Check how the quickjs and primjs backends store env_to_jsr_cache as well. Done means concurrent runtime creation and disposal cannot corrupt state another runtime reads; the issue names no tests to run.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Summary
Several process-wide statics hold one entry per runtime, or one value set by every runtime. Each runtime reads and writes them from its own thread, with no lock. When workers start or stop while other runtimes are running, these are data races of the same kind as #93: a hash table can rehash under a concurrent reader, and a std::string can be reallocated under a concurrent reader.
| Static | Where | Written | Read |
|---|---|---|---|
JSR::env_to_jsr_cache (std::unordered_map) |
NativeScript/napi/v8/jsr.cpp |
js_create_napi_env, js_free_napi_env |
js_lock_env / js_unlock_env |
MetadataNode::s_arrayObjects (robin_hood::unordered_map) |
NativeScript/ffi/jni/{napi,jsi}/metadata/MetadataNode.cpp |
first array-constructor lookup in each runtime; erased on dispose | every array-constructor lookup |
envToPersistentSmartJSONStringify / rtToPersistentSmartJSONStringify (robin_hood::unordered_map) |
NativeScript/ffi/jni/{napi,jsi}/global/GlobalHelpers.cpp |
first JsonStringifyObject in each runtime; erased on dispose |
every JsonStringifyObject |
Constants::APP_ROOT_FOLDER_PATH (std::string) |
NativeScript/ffi/jni/{napi,jsi}/constants/Constants.cpp |
assigned in Runtime::Init of every runtime (NativeScript/runtime/android/{napi,jsi}/Runtime.cpp) |
module resolution, stack traces, MetadataNode origins, inspector |
The quickjs and primjs backends keep env_to_jsr_cache in a tns::SimpleMap, which has no lock either. The hermes backend already guards its copy with env_to_jsr_mutex.
MetadataNode::s_metadata_node_cache and (with #96) ArgConverter's long-conversion cache already use tns::ConcurrentMap, which is the pattern to follow for the maps.
Expected
Creating or disposing one runtime can't corrupt state another runtime is reading. Possible fixes:
- the per-runtime maps move to
tns::ConcurrentMapwith theGet/Insert/Removepattern used in #96, or become per-runtime state; APP_ROOT_FOLDER_PATHis set once per process, since every runtime computes the same value (filesRoot + "/app/"), or is guarded.
Environment
- Branch:
android-react-nativeat 64c7fed0 - Found by reading the code while fixing #93; these were not seen crashing on their own.
Related: #93, #96, and #97 and #98 (the console timer maps).
- Langage dominant
- C++
- Étoiles
- 27
- Forks
- 4
- Merge moyen
- 16 h 48 min
- PR mergées (30 j)
- 4
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de NativeScript/runtimes
-
bug
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
NativeScript/runtimes#100 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 4/5 1-2 jours Accessibilité débutants 55/100
NativeScript/runtimes#98 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 4/5 3-5 jours Accessibilité débutants 53/100
NativeScript/runtimes#97 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
NativeScript/runtimes#94 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
NativeScript/runtimes#93 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de NativeScript/runtimes
Issues similaires
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Les mainteneurs répondent en général sous 1 jour
-
enhancement Ready for final check
Difficulté 2/5 1-3 heures Accessibilité débutants 79/100
mpogue2/SquareDesk#1818 · 1 commentaire ·
-
launch-client --save-creds creates creds/<account>/ with mode 755, not 700Peut-être pris @metis-sprock l’a pris aujourd’hui. Ouvertebacklog bug
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
EchoTools/nevr-runtime#1471 ·
Les mainteneurs répondent en général sous 1 jour
-
docs: Page not found?Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 66/100
Les mainteneurs répondent en général sous 2 jours
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
iamankushpandit/Gume#231 ·
Les mainteneurs répondent en général sous 1 jour