memory problem with the X11 - SHM backend

Cedric Roux <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
Hi cairo,

I have a problem running you with X11/Xshm. This is a debian host here.
The following program reports an always increasing "evs" thing.
The first line it outputs is "1 evs" and the last one is
"7409 evs". That means the X event queue is not emptied. (Please don't
look at the style, it's a quick and dirty hack to let the problem pop
up.)

Oh yes, you need to create a 128x128 mini.png file to run it. Content
does not seem to matter, I have a white image here.

Am I doing something wrong with you or is the problem on your side?
If I call XSync(d, True) the queue is emptied and the original program
that exhibited the problem and from which I wrote that little proof of
concept still works pretty reasonably well. (What a terrific sentence
I just wrote...)
Except it smokes my CPU like hell, but that's none of your concern I
suspect.

In the hope that you can help me here...
Regards cairo, have a nice sunday.

#include <stdio.h>
#include <cairo/cairo.h>
#include <cairo/cairo-xlib.h>
#include <X11/Xlib.h>
#include <stdlib.h>

int main(void)
{
   cairo_surface_t *image;
   cairo_pattern_t *pletters;
   cairo_surface_t *cs;
   Display *d;
   Pixmap p;

   d = XOpenDisplay(0); if (!d) abort();
   p = XCreatePixmap(d, DefaultRootWindow(d), 256, 256,
                     DefaultDepth(d, DefaultScreen(d)));
   cs = cairo_xlib_surface_create(d, p, DefaultVisual(d, DefaultScreen(d)),
                                  256, 256);

   //image = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 512, 512);
   image = cairo_image_surface_create_from_png("mini.png");
   pletters = cairo_pattern_create_for_surface(image);

   int y;
   for (y=0; y < 500; y++) {
     int i;
     cairo_matrix_t m;
     cairo_t *c = cairo_create(cs);

     //cairo_scale(c, 0.5, 0.5);
     //cairo_translate(c, 1, 1);
     for (i = 0; i < 15; i++) {
       //static int z = 2;  cairo_matrix_init_translate(&m, 0, 0); //z = 
2 - z;
       cairo_matrix_init_translate(&m, 0, 0); //z = 2 - z;
       cairo_pattern_set_matrix(pletters, &m);
       cairo_set_source(c, pletters);
       cairo_paint(c);

       //XSync(d, True);
       printf("%d evs\n", XEventsQueued(d, QueuedAfterReading));
       //XFlush(d);

       XEvent ev; while (XCheckMaskEvent(d, -1L, &ev)) { 
printf("event!\n"); }
     }

     cairo_destroy(c);
   }

   return 0;
}
-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.