fix callback pointer wrapping in glut
[clinton/guile-figl.git] / figl / glut / types.scm
index 91e0723..9a043f6 100644 (file)
    ((ffi:pointer? x)
     x)
    ((procedure? x)
-    (letrec ((wrapper (lambda args
-                        (gc-unprotect! wrapper)
-                        (apply x args))))
-      (gc-protect! wrapper)
-      (ffi:procedure->pointer return-type wrapper arg-types)))
+    (letrec ((ptr (ffi:procedure->pointer return-type
+                                          (lambda args
+                                            (gc-unprotect! ptr)
+                                            (apply x args))
+                                          arg-types)))
+      (gc-protect! ptr)
+      ptr))
    (else
     (error "unhandled callback-pointer type" x))))
 
    ((ffi:pointer? x)
     x)
    ((procedure? x)
-    (gc-protect! x)
-    (ffi:procedure->pointer return-type x arg-types))
+    (let ((ptr (ffi:procedure->pointer return-type x arg-types)))
+      (gc-protect! ptr)
+      ptr))
    (else
     (error "unhandled callback-pointer type" x))))