This differential introduces utility function to run a block of code on an auxiliary thread if native api needs to be available. Auxiliary threads are not by default attached to JVM, so we cannot call for instance CommSecureStore or PlatformSpecificTools from them. This function allows to temporarily attach a thread to JVM and execute block of code represented by lambda. Once the block is done thread is detached from JVM. Attaching thread is fast operation according to documentation.
Details
Details
Write a noop function in SQLiteQueryEXecutor that accesses some native Android API. Schedule it on databaseThread in CommCoreModule. Build Android app, run it and see that it crashes with error "Unable to retrieve JNI Environment. Is the thread attached?". Now re-implement this function to use run_with_native_accessible. Build and run the app. It should not crash.
Diff Detail
Diff Detail
- Repository
- rCOMM Comm
- Lint
Lint Not Applicable - Unit
Tests Not Applicable
Event Timeline
Comment Actions
Sure, it starts from this line: https://github.com/facebookincubator/fbjni/blob/main/cxx/fbjni/detail/Environment.h#L94 and continues until ThreadScope class definition.