metal : logging va_args memory fix
This commit is contained in:
parent
4f0e09598f
commit
1f55026cd5
1 changed files with 15 additions and 6 deletions
21
ggml-metal.m
21
ggml-metal.m
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue