Skip to content

Commit 62fef26

Browse files
committed
JAW_GET_OBJ_IFACE and JAW_GET_OBJ: create local ref instead of global
1 parent 5e0107f commit 62fef26

File tree

1 file changed

+25
-37
lines changed

1 file changed

+25
-37
lines changed

src/jdk.accessibility/linux/native/libatk-wrapper/jawhyperlink.c

Lines changed: 25 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -217,20 +217,18 @@ static gchar *jaw_hyperlink_get_uri(AtkHyperlink *atk_hyperlink, gint i) {
217217
}
218218

219219
JAW_GET_HYPERLINK(atk_hyperlink,
220-
NULL); // create global JNI reference `jobject jhyperlink`
220+
NULL); // create local JNI reference `jobject jhyperlink`
221221

222222
if ((*jniEnv)->PushLocalFrame(jniEnv, JAW_DEFAULT_LOCAL_FRAME_SIZE) < 0) {
223-
(*jniEnv)->DeleteGlobalRef(
224-
jniEnv,
225-
jhyperlink); // deleting ref that was created in JAW_GET_HYPERLINK
223+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
226224
g_warning("%s: Failed to create a new local reference frame",
227225
G_STRFUNC);
228226
return NULL;
229227
}
230228

231229
if (!jaw_hyperlink_init_jni_cache(jniEnv)) {
232230
g_warning("%s: Failed to initialize JNI cache", G_STRFUNC);
233-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
231+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
234232
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
235233
return NULL;
236234
}
@@ -239,7 +237,7 @@ static gchar *jaw_hyperlink_get_uri(AtkHyperlink *atk_hyperlink, gint i) {
239237
jniEnv, jhyperlink, cachedHyperlinkGetUriMethod, (jint)i);
240238
if ((*jniEnv)->ExceptionCheck(jniEnv) || jstr == NULL) {
241239
jaw_jni_clear_exception(jniEnv);
242-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
240+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
243241
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
244242
return NULL;
245243
}
@@ -258,7 +256,7 @@ static gchar *jaw_hyperlink_get_uri(AtkHyperlink *atk_hyperlink, gint i) {
258256
jaw_hyperlink->uri = (gchar *)(*jniEnv)->GetStringUTFChars(
259257
jniEnv, jaw_hyperlink->jstrUri, NULL);
260258

261-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
259+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
262260
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
263261

264262
return jaw_hyperlink->uri;
@@ -286,17 +284,15 @@ static AtkObject *jaw_hyperlink_get_object(AtkHyperlink *atk_hyperlink,
286284
JAW_GET_HYPERLINK(atk_hyperlink, NULL);
287285

288286
if ((*jniEnv)->PushLocalFrame(jniEnv, JAW_DEFAULT_LOCAL_FRAME_SIZE) < 0) {
289-
(*jniEnv)->DeleteGlobalRef(
290-
jniEnv,
291-
jhyperlink); // deleting ref that was created in JAW_GET_HYPERLINK
287+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
292288
g_warning("%s: Failed to create a new local reference frame",
293289
G_STRFUNC);
294290
return NULL;
295291
}
296292

297293
if (!jaw_hyperlink_init_jni_cache(jniEnv)) {
298294
g_warning("%s: Failed to initialize JNI cache", G_STRFUNC);
299-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
295+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
300296
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
301297
return NULL;
302298
}
@@ -305,7 +301,7 @@ static AtkObject *jaw_hyperlink_get_object(AtkHyperlink *atk_hyperlink,
305301
jniEnv, jhyperlink, cachedHyperlinkGetObjectMethod, (jint)i);
306302
if ((*jniEnv)->ExceptionCheck(jniEnv) || ac == NULL) {
307303
jaw_jni_clear_exception(jniEnv);
308-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
304+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
309305
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
310306
return NULL;
311307
}
@@ -318,7 +314,7 @@ static AtkObject *jaw_hyperlink_get_object(AtkHyperlink *atk_hyperlink,
318314
// The returned data is owned by the instance (transfer none annotation), so
319315
// we don't ref the obj before returning it
320316

321-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
317+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
322318
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
323319

324320
return obj;
@@ -345,17 +341,15 @@ static gint jaw_hyperlink_get_end_index(AtkHyperlink *atk_hyperlink) {
345341
JAW_GET_HYPERLINK(atk_hyperlink, 0);
346342

347343
if ((*jniEnv)->PushLocalFrame(jniEnv, JAW_DEFAULT_LOCAL_FRAME_SIZE) < 0) {
348-
(*jniEnv)->DeleteGlobalRef(
349-
jniEnv,
350-
jhyperlink); // deleting ref that was created in JAW_GET_HYPERLINK
344+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
351345
g_warning("%s: Failed to create a new local reference frame",
352346
G_STRFUNC);
353347
return 0;
354348
}
355349

356350
if (!jaw_hyperlink_init_jni_cache(jniEnv)) {
357351
g_warning("%s: Failed to initialize JNI cache", G_STRFUNC);
358-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
352+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
359353
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
360354
return 0;
361355
}
@@ -364,12 +358,12 @@ static gint jaw_hyperlink_get_end_index(AtkHyperlink *atk_hyperlink) {
364358
cachedHyperlinkGetEndIndexMethod);
365359
if ((*jniEnv)->ExceptionCheck(jniEnv)) {
366360
jaw_jni_clear_exception(jniEnv);
367-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
361+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
368362
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
369363
return 0;
370364
}
371365

372-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
366+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
373367
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
374368

375369
return jindex;
@@ -396,17 +390,15 @@ static gint jaw_hyperlink_get_start_index(AtkHyperlink *atk_hyperlink) {
396390
JAW_GET_HYPERLINK(atk_hyperlink, 0);
397391

398392
if ((*jniEnv)->PushLocalFrame(jniEnv, JAW_DEFAULT_LOCAL_FRAME_SIZE) < 0) {
399-
(*jniEnv)->DeleteGlobalRef(
400-
jniEnv,
401-
jhyperlink); // deleting ref that was created in JAW_GET_HYPERLINK
393+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
402394
g_warning("%s: Failed to create a new local reference frame",
403395
G_STRFUNC);
404396
return 0;
405397
}
406398

407399
if (!jaw_hyperlink_init_jni_cache(jniEnv)) {
408400
g_warning("%s: Failed to initialize JNI cache", G_STRFUNC);
409-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
401+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
410402
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
411403
return 0;
412404
}
@@ -415,12 +407,12 @@ static gint jaw_hyperlink_get_start_index(AtkHyperlink *atk_hyperlink) {
415407
cachedHyperlinkGetStartIndexMethod);
416408
if ((*jniEnv)->ExceptionCheck(jniEnv)) {
417409
jaw_jni_clear_exception(jniEnv);
418-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
410+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
419411
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
420412
return 0;
421413
}
422414

423-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
415+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
424416
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
425417

426418
return jindex;
@@ -447,17 +439,15 @@ static gboolean jaw_hyperlink_is_valid(AtkHyperlink *atk_hyperlink) {
447439
JAW_GET_HYPERLINK(atk_hyperlink, FALSE);
448440

449441
if ((*jniEnv)->PushLocalFrame(jniEnv, JAW_DEFAULT_LOCAL_FRAME_SIZE) < 0) {
450-
(*jniEnv)->DeleteGlobalRef(
451-
jniEnv,
452-
jhyperlink); // deleting ref that was created in JAW_GET_HYPERLINK
442+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
453443
g_warning("%s: Failed to create a new local reference frame",
454444
G_STRFUNC);
455445
return FALSE;
456446
}
457447

458448
if (!jaw_hyperlink_init_jni_cache(jniEnv)) {
459449
g_warning("%s: Failed to initialize JNI cache", G_STRFUNC);
460-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
450+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
461451
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
462452
return FALSE;
463453
}
@@ -466,12 +456,12 @@ static gboolean jaw_hyperlink_is_valid(AtkHyperlink *atk_hyperlink) {
466456
jniEnv, jhyperlink, cachedHyperlinkIsValidMethod);
467457
if ((*jniEnv)->ExceptionCheck(jniEnv)) {
468458
jaw_jni_clear_exception(jniEnv);
469-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
459+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
470460
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
471461
return FALSE;
472462
}
473463

474-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
464+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
475465
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
476466

477467
return jvalid;
@@ -497,17 +487,15 @@ static gint jaw_hyperlink_get_n_anchors(AtkHyperlink *atk_hyperlink) {
497487
JAW_GET_HYPERLINK(atk_hyperlink, 0);
498488

499489
if ((*jniEnv)->PushLocalFrame(jniEnv, JAW_DEFAULT_LOCAL_FRAME_SIZE) < 0) {
500-
(*jniEnv)->DeleteGlobalRef(
501-
jniEnv,
502-
jhyperlink); // deleting ref that was created in JAW_GET_HYPERLINK
490+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
503491
g_warning("%s: Failed to create a new local reference frame",
504492
G_STRFUNC);
505493
return 0;
506494
}
507495

508496
if (!jaw_hyperlink_init_jni_cache(jniEnv)) {
509497
g_warning("%s: Failed to initialize JNI cache", G_STRFUNC);
510-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
498+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
511499
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
512500
return 0;
513501
}
@@ -516,12 +504,12 @@ static gint jaw_hyperlink_get_n_anchors(AtkHyperlink *atk_hyperlink) {
516504
cachedHyperlinkGetNAnchorsMethod);
517505
if ((*jniEnv)->ExceptionCheck(jniEnv)) {
518506
jaw_jni_clear_exception(jniEnv);
519-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
507+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
520508
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
521509
return 0;
522510
}
523511

524-
(*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
512+
(*jniEnv)->DeleteLocalRef(jniEnv, jhyperlink);
525513
(*jniEnv)->PopLocalFrame(jniEnv, NULL);
526514

527515
return janchors;

0 commit comments

Comments
 (0)