On Mon, 7 Dec 2020 05:14:36 GMT, David Holmes <[email protected]> wrote:

>> Another options is to save away the weakref in the node when strengthening. 
>> This would benefit `ObjectReference.disableCollection()` also, since it 
>> would no longer need to deal with a potential OOM. However, I'm not so sure 
>> it's actually worth doing. Trying to keep the debug session alive will 
>> having allocation errors is probably a fools errand.
>
> I agree a fatal error here seems excessive. Simply maintaining the strong ref 
> seems reasonable.

I was trying to mimic what we already do in `strengthenNode()`, i.e. it's a 
fatal error if we can't create a JNI ref. Here:

        strongRef = JNI_FUNC_PTR(env,NewGlobalRef)(env, node->ref);
        /*
         * NewGlobalRef on a weak ref will return NULL if the weak
         * reference has been collected or if out of memory.
         * It never throws OOM.
         * We need to distinguish those two occurrences.
         */
        if ((strongRef == NULL) && !isSameObject(env, node->ref, NULL)) {
            EXIT_ERROR(AGENT_ERROR_NULL_POINTER,"NewGlobalRef");
        }

So it seems appropriate to do the same thing if we fail to create a JNI weak 
ref. Also, as @plummercj mentioned, if we can't create a JNI ref, continuing 
the debug session seems rather pointless as we're about to go down anyway (the 
next allocation in the JVM will be fatal).

-------------

PR: https://git.openjdk.java.net/jdk/pull/1595

Reply via email to