Do not call g-value-init when setting return-value of closures
authorDmitry Kalyanov <Kalyanov.Dmitry@gmail.com>
Mon, 9 Mar 2009 07:45:20 +0000 (10:45 +0300)
committerDmitry Kalyanov <Kalyanov.Dmitry@gmail.com>
Mon, 9 Mar 2009 07:45:20 +0000 (10:45 +0300)
glib/gobject.foreign-closures.lisp
glib/gobject.gvalue-parser.lisp

index da0e731..1f87c70 100644 (file)
@@ -28,7 +28,7 @@
          (fn (get-stable-pointer-value function-id))
          (fn-result (call-with-restarts fn args)))
     (when return-type
-      (set-g-value return-value fn-result return-type))))
+      (set-g-value return-value fn-result return-type :g-value-init nil))))
 
 (defun parse-closure-arguments (count-of-args args)
   (loop
index f299f69..7d1873f 100644 (file)
            (+g-type-interface+ (parse-gvalue-object gvalue))
            (t (error "Unknown type: ~A (~A)" type (g-type-name type))))))))
 
-(defun set-g-value (gvalue value type &key zero-g-value unset-g-value)
+(defun set-g-value (gvalue value type &key zero-g-value unset-g-value (g-value-init t))
   (cond
     (zero-g-value (g-value-zero gvalue))
     (unset-g-value (g-value-unset gvalue)))
-  (g-value-init gvalue type)
+  (when g-value-init (g-value-init gvalue type))
   (let ((fundamental-type (g-type-fundamental type)))
     (cond
       ((= type (g-strv-get-type)) (g-value-set-boxed gvalue (convert-to-foreign value 'glib:gstrv)))