pixbuf leakage
"Walter C. Pelissero" <[email protected]> Fri, 25 Apr 2008 17:40:00 +0200
| Newsgroups | gmane.lisp.clg.devel |
|---|---|
| Message-ID | <[email protected]> |
The following code will leak memory but I couldn't quite find the hole.
The larger the loaded pixbuf/image the faster.
(gffi:defbinding (pixbuf-loader-write "gdk_pixbuf_loader_write") () boolean
(loader gdk:pixbuf-loader)
(buffer (vector (unsigned-byte 8)))
((length buffer) integer)
(nil glib:gerror-signal :out))
(gffi:defbinding (pixbuf-loader-close "gdk_pixbuf_loader_close") () boolean
(loader gdk:pixbuf-loader)
(nil glib:gerror-signal :out))
(gffi:defbinding (pixbuf-loader-get-pixbuf "gdk_pixbuf_loader_get_pixbuf") () (glib:referenced gdk:pixbuf)
(loader gdk:pixbuf-loader))
(gffi:defbinding (pixbuf-loader-set-size "gdk_pixbuf_loader_set_size") () nil
(loader gdk:pixbuf-loader)
(width integer)
(height integer))
(defparameter *image* (make-instance 'image :width-request 128 :height-request 64))
(defun loader-test ()
(let ((file "/home/wcp/pictures/scanned/archive/swan.jpg"))
#+cmu (ext:gc :full t)
#+sbcl (sb-ext:gc :full t)
(let ((loader (make-instance 'gdk:pixbuf-loader)))
(signal-connect loader 'size-prepared
#'(lambda (image-width image-height)
(declare (ignore image-width image-height))
(pixbuf-loader-set-size loader 128 64)
nil))
(signal-connect loader 'area-prepared
#'(lambda ()
(setf (image-pixbuf *image*)
(pixbuf-loader-get-pixbuf loader))
nil))
(unwind-protect
(with-open-file (stream file :element-type '(unsigned-byte 8))
(let ((buffer (make-sequence '(vector (unsigned-byte 8)) (* 4 1024))))
(flet ((forward-buffer (&optional n)
(pixbuf-loader-write loader (if n
(subseq buffer 0 n)
buffer))))
(loop
for n = (read-sequence buffer stream)
while (= n (length buffer))
do (forward-buffer)
finally (unless (zerop n)
(forward-buffer n))))))
(ignore-errors
(pixbuf-loader-close loader))))))
(defun leak-memory ()
(loop
for i from 0
do
(format t "~A~%" i)
(loader-test)))
Does anyone have suggestions?
--
walter pelissero
http://www.pelissero.de
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone