Subject: Re: bug#6230: 23.2; Pixmaps kept in X11 after (svg?) images no longer are used

From: Chong Yidong <[email-masked]>
Date: Thu, 20 May 2010 13:16:27 -0400

Anders Waldenborg <[email-masked]> writes:

> By running the command defined by the following:
>
> (require 'cl)
> (defun aw-replace-buffer-contents-with-svg-images ()
>   (interactive)
>   (erase-buffer)
>   (dotimes (N 200)
>     (insert-image (create-image (format "<svg width=\"50\"
> height=\"50\"><rect x=\"0\" y=\"0\" width=\"100\" height=\"100\"
> fill=\"#%02x%02x%02x\"/></svg>" (random 255)(random 255)(random 255))
> svg t))))
>
> the current buffer will be replaced with 200 images. Running xrestop it
> can easily be seen that 200 pixmaps are added to the X11 server every
> time the command is run.
>
> One would expect that the pixmaps were removed from X11 when they don't
> exist in any buffer any longer (which is why recipe uses erase-buffer so
> it can be run multiple times, increasing number of pixmaps every time -
> not the behaviour I expect).
>
> The pixmaps doesn't even go away when the buffer is killed.

You can run (clear-image-cache) to eliminate the image data.  Emacs also
does this automatically, every hundred redisplays.