jint JNICALL spreadInfo()

in src/sizes/retained_size_action.cpp [79:95]


jint JNICALL spreadInfo(jvmtiHeapReferenceKind refKind, const jvmtiHeapReferenceInfo *refInfo, jlong classTag,
                        jlong referrerClassTag, jlong size, jlong *tagPtr,
                        jlong *referrerTagPtr, jint length, void *userData) {
    if (refKind != JVMTI_HEAP_REFERENCE_JNI_LOCAL && refKind != JVMTI_HEAP_REFERENCE_JNI_GLOBAL &&
        *tagPtr != 0 && *referrerTagPtr != 0) {
        auto it = tagsWithNewInfo.find(*tagPtr);
        if (it != tagsWithNewInfo.end()) {
            tagsWithNewInfo.erase(it);
        }

        if (*referrerTagPtr != *tagPtr && shouldMerge(*tagPtr, *referrerTagPtr)) {
            *tagPtr = pointerToTag(merge(*tagPtr, *referrerTagPtr));
        }
    }

    return JVMTI_VISIT_OBJECTS;
}