jint JNICALL collectPaths()

in src/roots/paths_to_closest_gc_roots.cpp [11:35]


    jint JNICALL collectPaths(jvmtiHeapReferenceKind referenceKind,
                              const jvmtiHeapReferenceInfo *referenceInfo, jlong classTag,
                              jlong referrerClassTag, jlong size, jlong *tagPtr,
                              jlong *referrerTagPtr, jint length, void *userData) {
        if (*tagPtr == 0) {
            *tagPtr = pointerToTag(GcTag::create(referrerClassTag));
        }

        GcTag *tag = GcTag::pointerToGcTag(*tagPtr);
        if (referrerTagPtr != nullptr) {
            if (referrerClassTag != 0 && GcTag::pointerToGcTag(referrerClassTag)->isWeakSoftReachable()) {
                tag->updateState(GcTag::pointerToGcTag(referrerClassTag));
            } else {
                tag->updateState(GcTag::pointerToGcTag(*referrerTagPtr));
            }

            tag->backRefs.push_back(createReferenceInfo(*referrerTagPtr, referenceKind, referenceInfo));
        } else {
            // gc root found
            tag->backRefs.push_back(createReferenceInfo(-1, referenceKind, referenceInfo));
        }

        tag->setVisited();
        return JVMTI_VISIT_OBJECTS;
    }