Skip to content

Commit 856dc34

Browse files
authored
[NativeAOT] "Fix" AndroidRuntimeInternal.WaitForBridgeProcessing() (#10128)
Fixes: #10126 Context: 4b158ce Context: dotnet/java-interop@356485e Context: 32cff43 NativeAOT currently requires new binding assemblies, bindings which do not use `JNINativeWrapper.CreateDelegate()`, as one of the code paths within `JNINativeWrapper.CreateDelegate()` uses `System.Reflection.Emit`, which does not exist in NativeAOT. dotnet/java-interop@356485ee contains the `generator` changes needed to avoid `JNINativeWrapper.CreateDelegate()`. However, there is one situation in which that "requirement" is (kinda) *conditional*: commit 32cff43 added "builtin" JNI wrapper methods, avoiding the need for System.Reflection.Emit when overriding Java methods that match a builtin signature. This means existing binding assemblies can work, right? Kinda, yeah! So long as you *only* override methods which match a builtin signature. Which was enough to get MAUI going atop NativeAOT *without* rebuilding all of dotnet/android-libraries… However, for not-entirely-understood reasons, sometimes using a builtin JNI wrapper method would cause the app to crash: digest=============com.avalonia.safeareademo /apex/com.android.runtime/lib/bionic/libc.so (abort+) () XXlib/arm/libSafeAreaDemo.Android.so (SystemNative_Abort+) () XXlib/arm/libSafeAreaDemo.Android.so (S_P_CoreLib_Interop_Sys__Abort+) () XXlib/arm/libSafeAreaDemo.Android.so (S_P_CoreLib_System_RuntimeExceptionHelpers__FailFast+) () XXlib/arm/libSafeAreaDemo.Android.so (RuntimeFailFast+) () XXlib/arm/libSafeAreaDemo.Android.so (S_P_CoreLib_System_Runtime_EH__UnhandledExceptionFailFastViaClasslib+) () XXlib/arm/libSafeAreaDemo.Android.so (S_P_CoreLib_System_Runtime_EH__DispatchEx+) () XXlib/arm/libSafeAreaDemo.Android.so (RhThrowEx+) () XXlib/arm/libSafeAreaDemo.Android.so (RhpThrowEx+) () XXlib/arm/libSafeAreaDemo.Android.so (S_P_CoreLib_System_Runtime_CompilerServices_ClassConstructorRunner__EnsureClassConstructorRun+) () XXlib/arm/libSafeAreaDemo.Android.so (RhpCallCatchFunclet+) () XXlib/arm/libSafeAreaDemo.Android.so (S_P_CoreLib_System_Runtime_CompilerServices_ClassConstructorRunner__CheckStaticClassConstructionReturnNonGCStaticBase+) () XXlib/arm/libSafeAreaDemo.Android.so (Mono_Android_Runtime_Android_Runtime_AndroidRuntimeInternal__WaitForBridgeProcessing+) () XXlib/arm/libSafeAreaDemo.Android.so (Mono_Android_Android_Runtime_JNINativeWrapper__Wrap_JniMarshal_PPLL_L+) () XXlib/arm/libSafeAreaDemo.Android.so (Mono_Android__JniMarshal_PPLL_L__InvokeClosedStaticThunk+) () XXlib/arm/libSafeAreaDemo.Android.so (Internal_CompilerGenerated__Module___<ReverseDelegateStub>Mono_Android__JniMarshal_PPLL_L+) () /apex/com.android.art/lib/libart.so (art_quick_generic_jni_trampoline+) () The cause of this crash is that `JNIINativeWrapper.Wrap_JniMarshal_PPLL_L()` called `AndroidRuntimeInternal.WaitForBridgeProcessing()`, which in turn triggers the `AndroidRuntimeInternal` static constructor, which *throws* unless on MonoVM or CoreCLR, of which NativeAOT is neither. Fix this by updating `JNINativeWrapper.g.tt` to call `JNIEnv.ValueManager?.WaitForGCBridgeProcessing()` instead of `AndroidRuntimeInternal.WaitForBridgeProcessing()`. This allows NativeAOT to control what actually happens. Aside: this project includes [T4 Text Templates][0]. To regenerate the output files *without involving Visual Studio*, you can install the [`dotnet-t4`][1] tool: $ dotnet tool install --global dotnet-t4 then run it separately for each `.tt` file: $HOME/.dotnet/tools/t4 -o src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs \ src/Mono.Android/Android.Runtime/JNINativeWrapper.g.tt [0]: https://learn.microsoft.com/visualstudio/modeling/code-generation-and-t4-text-templates?view=vs-2022 [1]: https://www.nuget.org/packages/dotnet-t4/
1 parent 3e28a41 commit 856dc34

File tree

3 files changed

+42
-42
lines changed

3 files changed

+42
-42
lines changed

src/Mono.Android/Android.Runtime/JNIEnv.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ internal static void PropagateUncaughtException (IntPtr env, IntPtr javaThreadPt
118118

119119
public static void WaitForBridgeProcessing ()
120120
{
121-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
121+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
122122
}
123123

124124
public static IntPtr AllocObject (string jniClassName)

src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ static bool _unhandled_exception (Exception e)
1717

1818
internal static void Wrap_JniMarshal_PP_V (this _JniMarshal_PP_V callback, IntPtr jnienv, IntPtr klazz)
1919
{
20-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
20+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
2121
try {
2222
callback (jnienv, klazz);
2323
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -28,7 +28,7 @@ internal static void Wrap_JniMarshal_PP_V (this _JniMarshal_PP_V callback, IntPt
2828

2929
internal static int Wrap_JniMarshal_PP_I (this _JniMarshal_PP_I callback, IntPtr jnienv, IntPtr klazz)
3030
{
31-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
31+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
3232
try {
3333
return callback (jnienv, klazz);
3434
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -39,7 +39,7 @@ internal static int Wrap_JniMarshal_PP_I (this _JniMarshal_PP_I callback, IntPtr
3939

4040
internal static bool Wrap_JniMarshal_PP_Z (this _JniMarshal_PP_Z callback, IntPtr jnienv, IntPtr klazz)
4141
{
42-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
42+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
4343
try {
4444
return callback (jnienv, klazz);
4545
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -50,7 +50,7 @@ internal static bool Wrap_JniMarshal_PP_Z (this _JniMarshal_PP_Z callback, IntPt
5050

5151
internal static void Wrap_JniMarshal_PPI_V (this _JniMarshal_PPI_V callback, IntPtr jnienv, IntPtr klazz, int p0)
5252
{
53-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
53+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
5454
try {
5555
callback (jnienv, klazz, p0);
5656
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -61,7 +61,7 @@ internal static void Wrap_JniMarshal_PPI_V (this _JniMarshal_PPI_V callback, Int
6161

6262
internal static IntPtr Wrap_JniMarshal_PPI_L (this _JniMarshal_PPI_L callback, IntPtr jnienv, IntPtr klazz, int p0)
6363
{
64-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
64+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
6565
try {
6666
return callback (jnienv, klazz, p0);
6767
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -72,7 +72,7 @@ internal static IntPtr Wrap_JniMarshal_PPI_L (this _JniMarshal_PPI_L callback, I
7272

7373
internal static int Wrap_JniMarshal_PPI_I (this _JniMarshal_PPI_I callback, IntPtr jnienv, IntPtr klazz, int p0)
7474
{
75-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
75+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
7676
try {
7777
return callback (jnienv, klazz, p0);
7878
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -83,7 +83,7 @@ internal static int Wrap_JniMarshal_PPI_I (this _JniMarshal_PPI_I callback, IntP
8383

8484
internal static long Wrap_JniMarshal_PPI_J (this _JniMarshal_PPI_J callback, IntPtr jnienv, IntPtr klazz, int p0)
8585
{
86-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
86+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
8787
try {
8888
return callback (jnienv, klazz, p0);
8989
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -94,7 +94,7 @@ internal static long Wrap_JniMarshal_PPI_J (this _JniMarshal_PPI_J callback, Int
9494

9595
internal static int Wrap_JniMarshal_PPL_I (this _JniMarshal_PPL_I callback, IntPtr jnienv, IntPtr klazz, IntPtr p0)
9696
{
97-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
97+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
9898
try {
9999
return callback (jnienv, klazz, p0);
100100
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -105,7 +105,7 @@ internal static int Wrap_JniMarshal_PPL_I (this _JniMarshal_PPL_I callback, IntP
105105

106106
internal static IntPtr Wrap_JniMarshal_PPL_L (this _JniMarshal_PPL_L callback, IntPtr jnienv, IntPtr klazz, IntPtr p0)
107107
{
108-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
108+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
109109
try {
110110
return callback (jnienv, klazz, p0);
111111
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -116,7 +116,7 @@ internal static IntPtr Wrap_JniMarshal_PPL_L (this _JniMarshal_PPL_L callback, I
116116

117117
internal static void Wrap_JniMarshal_PPL_V (this _JniMarshal_PPL_V callback, IntPtr jnienv, IntPtr klazz, IntPtr p0)
118118
{
119-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
119+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
120120
try {
121121
callback (jnienv, klazz, p0);
122122
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -127,7 +127,7 @@ internal static void Wrap_JniMarshal_PPL_V (this _JniMarshal_PPL_V callback, Int
127127

128128
internal static bool Wrap_JniMarshal_PPL_Z (this _JniMarshal_PPL_Z callback, IntPtr jnienv, IntPtr klazz, IntPtr p0)
129129
{
130-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
130+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
131131
try {
132132
return callback (jnienv, klazz, p0);
133133
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -138,7 +138,7 @@ internal static bool Wrap_JniMarshal_PPL_Z (this _JniMarshal_PPL_Z callback, Int
138138

139139
internal static bool Wrap_JniMarshal_PPJ_Z (this _JniMarshal_PPJ_Z callback, IntPtr jnienv, IntPtr klazz, long p0)
140140
{
141-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
141+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
142142
try {
143143
return callback (jnienv, klazz, p0);
144144
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -149,7 +149,7 @@ internal static bool Wrap_JniMarshal_PPJ_Z (this _JniMarshal_PPJ_Z callback, Int
149149

150150
internal static void Wrap_JniMarshal_PPII_V (this _JniMarshal_PPII_V callback, IntPtr jnienv, IntPtr klazz, int p0, int p1)
151151
{
152-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
152+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
153153
try {
154154
callback (jnienv, klazz, p0, p1);
155155
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -160,7 +160,7 @@ internal static void Wrap_JniMarshal_PPII_V (this _JniMarshal_PPII_V callback, I
160160

161161
internal static IntPtr Wrap_JniMarshal_PPII_L (this _JniMarshal_PPII_L callback, IntPtr jnienv, IntPtr klazz, int p0, int p1)
162162
{
163-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
163+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
164164
try {
165165
return callback (jnienv, klazz, p0, p1);
166166
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -171,7 +171,7 @@ internal static IntPtr Wrap_JniMarshal_PPII_L (this _JniMarshal_PPII_L callback,
171171

172172
internal static void Wrap_JniMarshal_PPLI_V (this _JniMarshal_PPLI_V callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, int p1)
173173
{
174-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
174+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
175175
try {
176176
callback (jnienv, klazz, p0, p1);
177177
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -182,7 +182,7 @@ internal static void Wrap_JniMarshal_PPLI_V (this _JniMarshal_PPLI_V callback, I
182182

183183
internal static void Wrap_JniMarshal_PPLZ_V (this _JniMarshal_PPLZ_V callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, bool p1)
184184
{
185-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
185+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
186186
try {
187187
callback (jnienv, klazz, p0, p1);
188188
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -193,7 +193,7 @@ internal static void Wrap_JniMarshal_PPLZ_V (this _JniMarshal_PPLZ_V callback, I
193193

194194
internal static void Wrap_JniMarshal_PPLL_V (this _JniMarshal_PPLL_V callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, IntPtr p1)
195195
{
196-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
196+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
197197
try {
198198
callback (jnienv, klazz, p0, p1);
199199
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -204,7 +204,7 @@ internal static void Wrap_JniMarshal_PPLL_V (this _JniMarshal_PPLL_V callback, I
204204

205205
internal static void Wrap_JniMarshal_PPLF_V (this _JniMarshal_PPLF_V callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, float p1)
206206
{
207-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
207+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
208208
try {
209209
callback (jnienv, klazz, p0, p1);
210210
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -215,7 +215,7 @@ internal static void Wrap_JniMarshal_PPLF_V (this _JniMarshal_PPLF_V callback, I
215215

216216
internal static IntPtr Wrap_JniMarshal_PPLI_L (this _JniMarshal_PPLI_L callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, int p1)
217217
{
218-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
218+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
219219
try {
220220
return callback (jnienv, klazz, p0, p1);
221221
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -226,7 +226,7 @@ internal static IntPtr Wrap_JniMarshal_PPLI_L (this _JniMarshal_PPLI_L callback,
226226

227227
internal static IntPtr Wrap_JniMarshal_PPLL_L (this _JniMarshal_PPLL_L callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, IntPtr p1)
228228
{
229-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
229+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
230230
try {
231231
return callback (jnienv, klazz, p0, p1);
232232
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -237,7 +237,7 @@ internal static IntPtr Wrap_JniMarshal_PPLL_L (this _JniMarshal_PPLL_L callback,
237237

238238
internal static bool Wrap_JniMarshal_PPLL_Z (this _JniMarshal_PPLL_Z callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, IntPtr p1)
239239
{
240-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
240+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
241241
try {
242242
return callback (jnienv, klazz, p0, p1);
243243
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -248,7 +248,7 @@ internal static bool Wrap_JniMarshal_PPLL_Z (this _JniMarshal_PPLL_Z callback, I
248248

249249
internal static bool Wrap_JniMarshal_PPIL_Z (this _JniMarshal_PPIL_Z callback, IntPtr jnienv, IntPtr klazz, int p0, IntPtr p1)
250250
{
251-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
251+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
252252
try {
253253
return callback (jnienv, klazz, p0, p1);
254254
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -259,7 +259,7 @@ internal static bool Wrap_JniMarshal_PPIL_Z (this _JniMarshal_PPIL_Z callback, I
259259

260260
internal static void Wrap_JniMarshal_PPIIL_V (this _JniMarshal_PPIIL_V callback, IntPtr jnienv, IntPtr klazz, int p0, int p1, IntPtr p2)
261261
{
262-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
262+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
263263
try {
264264
callback (jnienv, klazz, p0, p1, p2);
265265
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -270,7 +270,7 @@ internal static void Wrap_JniMarshal_PPIIL_V (this _JniMarshal_PPIIL_V callback,
270270

271271
internal static int Wrap_JniMarshal_PPLII_I (this _JniMarshal_PPLII_I callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, int p1, int p2)
272272
{
273-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
273+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
274274
try {
275275
return callback (jnienv, klazz, p0, p1, p2);
276276
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -281,7 +281,7 @@ internal static int Wrap_JniMarshal_PPLII_I (this _JniMarshal_PPLII_I callback,
281281

282282
internal static bool Wrap_JniMarshal_PPLII_Z (this _JniMarshal_PPLII_Z callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, int p1, int p2)
283283
{
284-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
284+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
285285
try {
286286
return callback (jnienv, klazz, p0, p1, p2);
287287
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -292,7 +292,7 @@ internal static bool Wrap_JniMarshal_PPLII_Z (this _JniMarshal_PPLII_Z callback,
292292

293293
internal static void Wrap_JniMarshal_PPLII_V (this _JniMarshal_PPLII_V callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, int p1, int p2)
294294
{
295-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
295+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
296296
try {
297297
callback (jnienv, klazz, p0, p1, p2);
298298
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -303,7 +303,7 @@ internal static void Wrap_JniMarshal_PPLII_V (this _JniMarshal_PPLII_V callback,
303303

304304
internal static void Wrap_JniMarshal_PPIII_V (this _JniMarshal_PPIII_V callback, IntPtr jnienv, IntPtr klazz, int p0, int p1, int p2)
305305
{
306-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
306+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
307307
try {
308308
callback (jnienv, klazz, p0, p1, p2);
309309
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -314,7 +314,7 @@ internal static void Wrap_JniMarshal_PPIII_V (this _JniMarshal_PPIII_V callback,
314314

315315
internal static bool Wrap_JniMarshal_PPLLJ_Z (this _JniMarshal_PPLLJ_Z callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, IntPtr p1, long p2)
316316
{
317-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
317+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
318318
try {
319319
return callback (jnienv, klazz, p0, p1, p2);
320320
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -325,7 +325,7 @@ internal static bool Wrap_JniMarshal_PPLLJ_Z (this _JniMarshal_PPLLJ_Z callback,
325325

326326
internal static void Wrap_JniMarshal_PPILL_V (this _JniMarshal_PPILL_V callback, IntPtr jnienv, IntPtr klazz, int p0, IntPtr p1, IntPtr p2)
327327
{
328-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
328+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
329329
try {
330330
callback (jnienv, klazz, p0, p1, p2);
331331
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -336,7 +336,7 @@ internal static void Wrap_JniMarshal_PPILL_V (this _JniMarshal_PPILL_V callback,
336336

337337
internal static bool Wrap_JniMarshal_PPLIL_Z (this _JniMarshal_PPLIL_Z callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, int p1, IntPtr p2)
338338
{
339-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
339+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
340340
try {
341341
return callback (jnienv, klazz, p0, p1, p2);
342342
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -347,7 +347,7 @@ internal static bool Wrap_JniMarshal_PPLIL_Z (this _JniMarshal_PPLIL_Z callback,
347347

348348
internal static void Wrap_JniMarshal_PPLLL_V (this _JniMarshal_PPLLL_V callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, IntPtr p1, IntPtr p2)
349349
{
350-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
350+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
351351
try {
352352
callback (jnienv, klazz, p0, p1, p2);
353353
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -358,7 +358,7 @@ internal static void Wrap_JniMarshal_PPLLL_V (this _JniMarshal_PPLLL_V callback,
358358

359359
internal static IntPtr Wrap_JniMarshal_PPLLL_L (this _JniMarshal_PPLLL_L callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, IntPtr p1, IntPtr p2)
360360
{
361-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
361+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
362362
try {
363363
return callback (jnienv, klazz, p0, p1, p2);
364364
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -369,7 +369,7 @@ internal static IntPtr Wrap_JniMarshal_PPLLL_L (this _JniMarshal_PPLLL_L callbac
369369

370370
internal static bool Wrap_JniMarshal_PPLLL_Z (this _JniMarshal_PPLLL_Z callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, IntPtr p1, IntPtr p2)
371371
{
372-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
372+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
373373
try {
374374
return callback (jnienv, klazz, p0, p1, p2);
375375
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -380,7 +380,7 @@ internal static bool Wrap_JniMarshal_PPLLL_Z (this _JniMarshal_PPLLL_Z callback,
380380

381381
internal static IntPtr Wrap_JniMarshal_PPIZI_L (this _JniMarshal_PPIZI_L callback, IntPtr jnienv, IntPtr klazz, int p0, bool p1, int p2)
382382
{
383-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
383+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
384384
try {
385385
return callback (jnienv, klazz, p0, p1, p2);
386386
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -391,7 +391,7 @@ internal static IntPtr Wrap_JniMarshal_PPIZI_L (this _JniMarshal_PPIZI_L callbac
391391

392392
internal static void Wrap_JniMarshal_PPIIII_V (this _JniMarshal_PPIIII_V callback, IntPtr jnienv, IntPtr klazz, int p0, int p1, int p2, int p3)
393393
{
394-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
394+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
395395
try {
396396
callback (jnienv, klazz, p0, p1, p2, p3);
397397
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -402,7 +402,7 @@ internal static void Wrap_JniMarshal_PPIIII_V (this _JniMarshal_PPIIII_V callbac
402402

403403
internal static void Wrap_JniMarshal_PPLLLL_V (this _JniMarshal_PPLLLL_V callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, IntPtr p1, IntPtr p2, IntPtr p3)
404404
{
405-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
405+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
406406
try {
407407
callback (jnienv, klazz, p0, p1, p2, p3);
408408
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -413,7 +413,7 @@ internal static void Wrap_JniMarshal_PPLLLL_V (this _JniMarshal_PPLLLL_V callbac
413413

414414
internal static bool Wrap_JniMarshal_PPLZZL_Z (this _JniMarshal_PPLZZL_Z callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, bool p1, bool p2, IntPtr p3)
415415
{
416-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
416+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
417417
try {
418418
return callback (jnienv, klazz, p0, p1, p2, p3);
419419
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -424,7 +424,7 @@ internal static bool Wrap_JniMarshal_PPLZZL_Z (this _JniMarshal_PPLZZL_Z callbac
424424

425425
internal static void Wrap_JniMarshal_PPLIIII_V (this _JniMarshal_PPLIIII_V callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, int p1, int p2, int p3, int p4)
426426
{
427-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
427+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
428428
try {
429429
callback (jnienv, klazz, p0, p1, p2, p3, p4);
430430
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -435,7 +435,7 @@ internal static void Wrap_JniMarshal_PPLIIII_V (this _JniMarshal_PPLIIII_V callb
435435

436436
internal static void Wrap_JniMarshal_PPZIIII_V (this _JniMarshal_PPZIIII_V callback, IntPtr jnienv, IntPtr klazz, bool p0, int p1, int p2, int p3, int p4)
437437
{
438-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
438+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
439439
try {
440440
callback (jnienv, klazz, p0, p1, p2, p3, p4);
441441
} catch (Exception e) when (_unhandled_exception (e)) {
@@ -446,7 +446,7 @@ internal static void Wrap_JniMarshal_PPZIIII_V (this _JniMarshal_PPZIIII_V callb
446446

447447
internal static void Wrap_JniMarshal_PPLIIIIIIII_V (this _JniMarshal_PPLIIIIIIII_V callback, IntPtr jnienv, IntPtr klazz, IntPtr p0, int p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8)
448448
{
449-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
449+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
450450
try {
451451
callback (jnienv, klazz, p0, p1, p2, p3, p4, p5, p6, p7, p8);
452452
} catch (Exception e) when (_unhandled_exception (e)) {

src/Mono.Android/Android.Runtime/JNINativeWrapper.g.tt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ foreach (var info in delegateTypes) {
268268
#>
269269
internal static <#= info.Return #> Wrap<#= info.Type #> (this <#= info.Type #> callback, <#= info.Signature #>)
270270
{
271-
AndroidRuntimeInternal.WaitForBridgeProcessing ();
271+
JNIEnvInit.ValueManager?.WaitForGCBridgeProcessing ();
272272
try {
273273
<#= info.Return != "void" ? "return " : "" #>callback (<#= info.Invoke #>);
274274
} catch (Exception e) when (_unhandled_exception (e)) {

0 commit comments

Comments
 (0)