JNI global references leak when native method registration fails
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 66/100
Piste de recherche
Commencez dans native/dispatch.c, au niveau de Java_com_sun_jna_Native_registerMethod, en particulier sur le chemin de nettoyage atteint après l’échec de ffi_prep_cif, ffi_closure_alloc ou ffi_prep_closure_loc. Suivez la propriété de closure_method, from_native, to_native, closure_arg_types, encoding et de la FFI closure, puis vérifiez que les enregistrements échoués les libèrent, tandis que les enregistrements réussis continuent de transférer le nettoyage à Native_unregister.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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.
- Langage dominant
- Java
- Étoiles
- 8.9k
- Forks
- 1.7k
- Merge moyen
- 7 j 18 h
- PR mergées (30 j)
- 2
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
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 java-native-access/jna
-
MacFileUtils: FSPathMakeRef passes an int where the C function takes its FSRef output pointerPeut-être à nouveau libre @VelpulaGangavardhan l’a pris il y a 8 jours, et aucune pull request n’est ouverte. Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 79/100
java-native-access/jna#1746 · 1 commentaire ·
-
User32: SetCursorPos is declared (long, long), but Windows declares (int, int)Peut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
java-native-access/jna#1745 ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
java-native-access/jna#1747 · 1 commentaire ·
-
`Native.typeOptions` never releases library interfaces, leaking classloadersPeut-être pris @curforever l’a pris il y a 21 jours. Ouverte
Difficulté 4/5 1-2 jours Accessibilité débutants 48/100
java-native-access/jna#1742 ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 45/100
java-native-access/jna#1736 ·
Toutes les issues de java-native-access/jna
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
a2aproject/a2a-java#1275 ·
Les mainteneurs répondent en général sous 1 jour
-
module/ftp Type/Bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
ballerina-platform/ballerina-library#9476 ·
Les mainteneurs répondent en général sous 1 jour
-
[Feature] 为世界管理页面添加打开存档文件夹按钮Ouverteenhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
HMCL-dev/HMCL#7175 · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
anwilli5/coin-collection-android-US#515 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
FasterXML/jackson-databind#6398 ·
Les mainteneurs répondent en général sous 1 jour