metal : logging va_args memory fix

This commit is contained in:
Rickard Hallerbäck 2023-09-13 16:01:46 +02:00
parent 4f0e09598f
commit 1f55026cd5

View file

@ -126,13 +126,22 @@ void ggml_metal_log_set_callback(void (*log_callback)(enum llama_log_level level
ggml_metal_log_user_data = user_data; ggml_metal_log_user_data = user_data;
} }
static void ggml_metal_log(enum llama_log_level level, const char* format, ...) { static void ggml_metal_log(enum llama_log_level level, const char* format, ...){
if ( ggml_metal_log_callback != NULL ) { if ( ggml_metal_log_callback != NULL ) {
va_list arg; va_list args;
va_start(arg, format); va_start(args, format);
char const* text = va_arg(arg, char const*); char buffer[128];
ggml_metal_log_callback(level, text, ggml_metal_log_user_data); int len = vsnprintf(buffer, 128, format, args);
va_end(arg); if (len < 128) {
ggml_metal_log_callback(level, buffer, ggml_metal_log_user_data);
} else {
char* buffer2 = malloc(len+1);
vsnprintf(buffer2, len+1, format, args);
buffer2[len] = 0;
ggml_metal_log_callback(level, buffer2, ggml_metal_log_user_data);
free(buffer2);
}
va_end(args);
} }
} }