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;
}
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 ) {
va_list arg;
va_start(arg, format);
char const* text = va_arg(arg, char const*);
ggml_metal_log_callback(level, text, ggml_metal_log_user_data);
va_end(arg);
va_list args;
va_start(args, format);
char buffer[128];
int len = vsnprintf(buffer, 128, format, args);
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);
}
}