kherud / java-llama.cpp

Java Bindings for llama.cpp - A Port of Facebook's LLaMA model in C/C++
MIT License
279 stars 28 forks source link

Deleting local references where it doesn't exist #38

Closed samolego closed 8 months ago

samolego commented 8 months ago

I was digging through the code when trying to get #37 to work ...

static void jllama_log_callback(enum ggml_log_level level, const char *text, void *user_data)
{
    if (g_log_callback == nullptr)
        return;

    JNIEnv *env;
    g_vm->GetEnv(reinterpret_cast<void **>(&env), JNI_VERSION_1_2);

    jobject java_log_level;
    switch (level)
    {
    case GGML_LOG_LEVEL_ERROR:
        java_log_level = o_log_level_error;
        break;
    case GGML_LOG_LEVEL_WARN:
        java_log_level = o_log_level_warn;
        break;
    case GGML_LOG_LEVEL_INFO:
        java_log_level = o_log_level_info;
        break;
    default:
        java_log_level = o_log_level_debug;
        break;
    }
    jstring java_text = env->NewStringUTF(text);

    env->CallVoidMethod(g_log_callback, m_biconsumer_accept, java_log_level, java_text);

    // Why is this getting deleted? LocalRef is not created ..?
    env->DeleteLocalRef(java_log_level);
    env->DeleteLocalRef(java_text);
}

This crashes for me, but if I comment it out, it works fine ...