JNI global references leak when native method registration fails
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 66/100
Rechercherichtung
Beginne in native/dispatch.c bei Java_com_sun_jna_Native_registerMethod, insbesondere beim Bereinigungspfad, der erreicht wird, nachdem ffi_prep_cif, ffi_closure_alloc oder ffi_prep_closure_loc fehlschlägt. Verfolge den Besitz von closure_method, from_native, to_native, closure_arg_types, encoding und der FFI closure und prüfe anschließend, dass fehlgeschlagene Registrierungen sie freigeben, während erfolgreiche Registrierungen die Bereinigung weiterhin an Native_unregister übertragen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Summary
Java_com_sun_jna_Native_registerMethod creates persistent JNI references before several fallible FFI initialization steps.
Affected code:
https://github.com/java-native-access/jna/blob/d036ad9781adad4b66693e8fa7098e4ac665e0a3/native/dispatch.c#L3553-L3587
If ffi_prep_cif, ffi_closure_alloc, or ffi_prep_closure_loc fails, execution jumps to cleanup. That path frees data without calling DeleteGlobalRef for data->closure_method.
Because registration did not complete, Native_unregister cannot release this reference later.
Impact
Each failed registration permanently retains the reflected Java Method and potentially its class-loader object graph until JVM shutdown. Repeated failures may cause persistent memory growth.
The same cleanup path also omits some related resources, including weak global references, closure_arg_types, encoding, and an allocated FFI closure.
Suggested fix
Before freeing data on failure:
- Delete
closure_methodwithDeleteGlobalRef. - Delete any
from_nativeandto_nativeweak global references. - Free all allocated arrays, encoding data, and FFI closure memory.
Successful registrations should continue to transfer ownership to Native_unregister.
- Vorherrschende Sprache
- Java
- Sterne
- 8.9k
- Forks
- 1.7k
- Ø Merge
- 7 T. 18 Std.
- Gemergte PRs (30 T.)
- 2
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
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 java-native-access/jna
-
MacFileUtils: FSPathMakeRef passes an int where the C function takes its FSRef output pointerEvtl. wieder frei @VelpulaGangavardhan hat das vor 13 Tagen übernommen, und es ist kein Pull Request offen. Offen
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 79/100
java-native-access/jna#1746 · 1 Kommentar ·
-
User32: SetCursorPos is declared (long, long), but Windows declares (int, int)Evtl. vergeben @OKAN-SOFTWARE hat das vor 8 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
java-native-access/jna#1745 ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 43/100
java-native-access/jna#1752 ·
-
Update libffi to v3.8.0?Offen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 44/100
java-native-access/jna#1751 · 2 Kommentare ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
java-native-access/jna#1747 · 1 Kommentar ·
Alle Issues in java-native-access/jna
Ähnliche Issues
-
bug main ui
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
openhab/openhab-webui#4671 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 64/100
NearVanilla/IceCream#109 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement good first issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
omatheusmesmo/vintelli#293 ·
Maintainer antworten meist innerhalb von 1 Tag
-
getRawTextContent() returns the lines of every page in reverse order (bottom to top) since 4.0.3Offen
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 90/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
bancolombia/bin-stash#79 ·