{"record":{"id":"7ed841e095596129","repo":"oracle/graal","slug":"global-jni-handle-already-exists-for-object-refere","errorCode":null,"errorMessage":"Global JNI handle already exists for object referenced by <handle.rawValue()>","messagePattern":"Global JNI handle already exists for object referenced by <handle\\.rawValue\\(\\)>","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"sdk/src/org.graalvm.jniutils/src/org/graalvm/jniutils/HSObject.java","lineNumber":181,"sourceCode":"            cleaner.clean(env);\n        }\n    }\n\n    /**\n     * Processes {@link #CLEANERS_QUEUE} to release any handles whose objects are now unreachable.\n     */\n    public static void cleanHandles(JNIEnv env) {\n        Cleaner cleaner;\n        while ((cleaner = (Cleaner) CLEANERS_QUEUE.poll()) != null) {\n            cleaner.clean(env);\n        }\n    }\n\n    private static void checkNonExistingGlobalReference(JNIEnv env, JObject handle) {\n        for (Cleaner cleaner : CLEANERS) {\n            synchronized (cleaner) {\n                if (cleaner.handle.isNonNull() && JNIUtil.IsSameObject(env, handle, cleaner.handle)) {\n                    throw new IllegalArgumentException(\"Global JNI handle already exists for object referenced by \" + handle.rawValue());\n                }\n            }\n        }\n    }\n\n    private static boolean assertionsEnabled() {\n        boolean res = false;\n        assert (res = true) == true;\n        return res;\n    }\n\n    /**\n     * Strong references to the {@link PhantomReference} objects.\n     */\n    private static final Set<Cleaner> CLEANERS = Collections.newSetFromMap(new ConcurrentHashMap<>());\n\n    /**\n     * Queue into which a {@link Cleaner} is enqueued when its {@link HSObject} referent becomes","sourceCodeStart":163,"sourceCodeEnd":199,"githubUrl":"https://github.com/oracle/graal/blob/a66e9ccd1d7bf2552883939aa0788dfd0e294aab/sdk/src/org.graalvm.jniutils/src/org/graalvm/jniutils/HSObject.java#L163-L199","documentation":"Error \"Global JNI handle already exists for object referenced by <handle.rawValue()>\" thrown in oracle/graal.","triggerScenarios":"Thrown at sdk/src/org.graalvm.jniutils/src/org/graalvm/jniutils/HSObject.java:181 when the library encounters an invalid state.","commonSituations":"Occurs when a caller violates the contract guarded by this check: Global JNI handle already exists for object referenced by <handle.rawValue()>","solutions":["Fix the condition reported by the error: Global JNI handle already exists for object referenced by <handle.rawValue()>","Check the throwing call site and ensure its documented preconditions (argument values, types, environment, or configuration) are satisfied before the call."],"exampleFix":"Validate inputs and environment so that the failing condition does not occur: Global JNI handle already exists for object referenced by <handle.rawValue()>","handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"a66e9ccd1d7bf2552883939aa0788dfd0e294aab","analyzedAt":"2026-08-14T13:58:47.161Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}