fix callback pointer wrapping in glut
authorAndy Wingo <wingo@pobox.com>
Mon, 11 Feb 2013 16:45:04 +0000 (17:45 +0100)
committerAndy Wingo <wingo@pobox.com>
Mon, 11 Feb 2013 16:45:04 +0000 (17:45 +0100)
* figl/glut/types.scm (coerce-callback-pointer/ephemeral):
  (coerce-callback-pointer/sticky): Fix to protect the pointer in
  addition to the procedure.

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))))