[cairo] Release planning for 0.14.2

Henry (Yu) Song henry.song at samsung.com
Sat Mar 7 14:19:42 PST 2015


I will re-work on this.  There is a memory leak in caio_surface_flush () in xlib surface.  Observed that 5000 cairo_surface_flush () calls leaks about 2 MB.

Thanks for feedback

-----Original Message-----
From: Bryce Harrington [mailto:bryce at osg.samsung.com] 
Sent: Saturday, March 07, 2015 1:56 PM
To: Uli Schlachter
Cc: Henry (Yu) Song; cairo at cairographics.org
Subject: Re: [cairo] Release planning for 0.14.2

On Sat, Mar 07, 2015 at 10:36:42AM +0100, Uli Schlachter wrote:
> Hi,
> 
> @Bryce: I would suggest reverting this

Hi Uli, thanks for the suggestion, I've reverted the change for the release.
 
> Am 05.03.2015 um 01:20 schrieb Henry (Yu) Song:
> [...]
> > Following patch fixes a memory leak in xlib surface.
> 
> this might be a stupid question, but: Which memory leak exactly? And 
> why doesn't the commit message say so?
> 
> All that _XEReadEvents() does is flushing the output buffer and 
> reading in events, appending them to the internal queue of pending 
> events (_XReadEvents ->
> poll_for_response() -> poll_for_event(), then back to _XReadEvents() 
> ->
> handle_response() -> _XEnq()). So no memory leak here.
> 
> Your code however calls _XDeq() on the first event on the queue. This 
> function just removes the event from the list, but does not free it. 
> So as I see it, this function is *introducing* a memory leak. And it 
> even does so in plain sight, without having any other effect.
> 
> (And also I have no idea why it would be a good idea to drop the whole 
> event queue. Pretty much none of the events in there belong to us. 
> Let's imagine an application mapping a window and then calling into 
> cairo. Cairo will happily drop the MapNotify event and also any Expose 
> events which means that the application will possibly not draw its 
> window.)
> 
> Could you please enlighten me?
> 
> > From cdd185b6143876a4ce320e4f3a3f59d3fc7a5813 Mon Sep 17 00:00:00 
> > 2001
> > From: Henry Song <henrysong at samsung.com>
> > Date: Wed, 4 Mar 2015 10:06:36 -0800
> > Subject: [PATCH] xlib: Remove queued event from _XReadEvents
> 
> This sounds like it should only remove the events that _XReadEvents() 
> just enqueued. This would still be a stupid idea, but the patch drops 
> the whole queue, no matter if part of it existed before _XReadEvents() was called.
> 
> > ---
> >  src/cairo-xlib-surface-shm.c |    5 +++++
> >  1 file changed, 5 insertions(+)
> > 
> > diff --git a/src/cairo-xlib-surface-shm.c 
> > b/src/cairo-xlib-surface-shm.c index fa7d3eb..9b13505 100644
> > --- a/src/cairo-xlib-surface-shm.c
> > +++ b/src/cairo-xlib-surface-shm.c
> > @@ -670,6 +670,7 @@ _cairo_xlib_shm_surface_flush (void *abstract_surface, unsigned flags)
> >      cairo_xlib_shm_surface_t *shm = abstract_surface;
> >      cairo_xlib_display_t *display;
> >      Display *dpy;
> > +    _XQEvent *qev;
> >      cairo_status_t status;
> >  
> >      if (shm->active == 0)
> > @@ -694,6 +695,10 @@ _cairo_xlib_shm_surface_flush (void *abstract_surface, unsigned flags)
> >      while (! seqno_passed (shm->active, LastKnownRequestProcessed (dpy))) {
> >  	LockDisplay(dpy);
> >  	_XReadEvents(dpy);
> > +	while (dpy->head) {
> > +	    qev = dpy->head;
> > +	    _XDeq (dpy, NULL, qev);
> > +	}
> >  	UnlockDisplay(dpy);
> >      }
> >  
> > 
> 
> --
> "Every once in a while, declare peace. It confuses the hell out of your enemies"
>  - 79th Rule of Acquisition


More information about the cairo mailing list