From a0f77960a1544a7debf3190cf54576209aef087c Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 16 Feb 2026 01:53:36 +0000 Subject: [PATCH] fix: resolve CGo type conflict in error handler Use pure C callback instead of //export to avoid const char* vs GoString type mismatch in cgo-generated headers. Co-Authored-By: Claude Opus 4.6 --- pkg/mlx/mlx.go | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/pkg/mlx/mlx.go b/pkg/mlx/mlx.go index e513fcf8..d78e47ed 100644 --- a/pkg/mlx/mlx.go +++ b/pkg/mlx/mlx.go @@ -25,10 +25,18 @@ package mlx #include #include "mlx/c/mlx.h" -extern void goMLXErrorHandler(const char *msg, void *data); +static const char *last_mlx_error = NULL; + +static void mlx_go_error_handler(const char *msg, void *data) { + last_mlx_error = msg; +} static void set_error_handler() { - mlx_set_error_handler(&goMLXErrorHandler, NULL, NULL); + mlx_set_error_handler(&mlx_go_error_handler, NULL, NULL); +} + +static const char* get_last_error() { + return last_mlx_error; } */ import "C" @@ -36,7 +44,6 @@ import "C" import ( "log/slog" "sync" - "unsafe" ) var initOnce sync.Once @@ -49,9 +56,11 @@ func Init() { }) } -//export goMLXErrorHandler -func goMLXErrorHandler(msg *C.char, data unsafe.Pointer) { - slog.Error("mlx", "error", C.GoString(msg)) +// checkError logs the last MLX error if any occurred. +func checkError() { + if msg := C.get_last_error(); msg != nil { + slog.Error("mlx", "error", C.GoString(msg)) + } } // Materialize synchronously evaluates arrays, computing their values on the GPU.