memory leak

"Walter C. Pelissero" <[email protected]> Fri, 20 Jul 2007 18:35:01 +0200
Newsgroups gmane.lisp.clg.devel
Message-ID <[email protected]>
The following ugly patches, based on just a very superficial
understanding of CLG innards, seem to fix the memory leak in the list
and tree stores.  I'm not sure, though, the leak hasn't deeper roots.
As far as I know it could be that any object ending in a container may
suffer of this reference count problem; I haven't checked it.

-- 
walter pelissero
http://www.pelissero.de



Index: gtktree.lisp
===================================================================
RCS file: /cvsroot/clg/clg/gtk/gtktree.lisp,v
retrieving revision 1.27
diff -c -r1.27 gtktree.lisp
*** gtktree.lisp	10 May 2007 20:20:05 -0000	1.27
--- gtktree.lisp	20 Jul 2007 16:24:50 -0000
***************
*** 117,123 ****
  (defmethod (setf tree-model-value) (value (store list-store) row column)
    (let* ((index (tree-model-column-index store column))
  	 (type (tree-model-get-column-type store index)))
!     (with-gvalue (gvalue type value)
        (%list-store-set-value store (ensure-tree-iter store row) index gvalue)))
    value)
  
--- 117,128 ----
  (defmethod (setf tree-model-value) (value (store list-store) row column)
    (let* ((index (tree-model-column-index store column))
  	 (type (tree-model-get-column-type store index)))
!     (with-memory (gvalue +gvalue-size+)
!       (glib::%gvalue-init gvalue (find-type-number type))
!       (funcall (writer-function type :temp t) value gvalue +gvalue-value-offset+)
!       (%list-store-set-value store (ensure-tree-iter store row) index gvalue)
!       nil)
!     #+(OR)(with-gvalue (gvalue type value)
        (%list-store-set-value store (ensure-tree-iter store row) index gvalue)))
    value)
  
***************
*** 703,709 ****
  (defmethod (setf tree-model-value) (value (store tree-store) row column)
    (let* ((index (tree-model-column-index store column))
  	 (type (tree-model-get-column-type store index)))
!     (with-gvalue (gvalue type value)
        (%tree-store-set-value store (ensure-tree-iter store row) index gvalue)))
    value)
  
--- 707,718 ----
  (defmethod (setf tree-model-value) (value (store tree-store) row column)
    (let* ((index (tree-model-column-index store column))
  	 (type (tree-model-get-column-type store index)))
!     (with-memory (gvalue +gvalue-size+)
!       (glib::%gvalue-init gvalue (find-type-number type))
!       (funcall (writer-function type :temp t) value gvalue +gvalue-value-offset+)
!       (%tree-store-set-value store (ensure-tree-iter store row) index gvalue)
!       nil)
!     #+(OR)(with-gvalue (gvalue type value)
        (%tree-store-set-value store (ensure-tree-iter store row) index gvalue)))
    value)
  

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/