[Spice-devel] [PATCH] qxl:fix double free surface when create device bitmap failed
Alon Levy
alevy at redhat.com
Thu Dec 9 00:53:06 PST 2010
On Thu, Dec 09, 2010 at 04:25:24PM +0800, Coolper Chen wrote:
> I'm using qxl master.
>
> GetSurfaceInfo(pdev, surface_id)->u.pdev = pdev;
>
> QXLGetSurface(pdev, phys_mem, size.cx, size.cy, depth,
> &stride, base_mem, allocation_type);
> if (!*base_mem) {
> //it executes "goto out_error2" in my windows xp guest.
> goto out_error2;
> }
(sorry for the double mails), to put it another way - are you
certain the FreeSurface doesn't happen in QXLGetSurface maybe or
any other location after EngCreateDeviceBitmap succeeds and prior
to goto out_error2?
>
> On Thu, 2010-12-09 at 16:15 +0800, Alon Levy wrote:
> > On Thu, Dec 09, 2010 at 09:07:23AM +0800, Coolper Chen wrote:
> > > DrvCreateDeviceBitmap will call FreeSurface function when
> > > CreateDeviceBitmap failed, no need call FreeSurface function in
> > > CreateDeviceBitmap function;
> > > It fixes the windows XP bluescreen problem that I encounter.
> > >
> > > diff --git a/display/surface.c b/display/surface.c
> > > index 7146b32..38200aa 100644
> > > --- a/display/surface.c
> > > +++ b/display/surface.c
> > > @@ -152,7 +152,6 @@ HBITMAP CreateDeviceBitmap(PDev *pdev, SIZEL size,
> > > ULONG format, QXLPHYSICAL *ph
> > > out_error3:
> > > QXLDelSurface(pdev, *base_mem, allocation_type);
> > > out_error2:
> > > - FreeSurface(pdev, surface_id);
> > > EngDeleteSurface((HSURF)surf);
> > > out_error1:
> > > return 0;
> > >
> >
> > Just to be clear, I realize it fixes your bsod, but It seems perhaps that
> > the free is being done elsewhere - maybe EngAssociateSurface if it fails
> > frees the surface?
> >
> > > /Coolper Chen
> > >
> > > _______________________________________________
> > > Spice-devel mailing list
> > > Spice-devel at lists.freedesktop.org
> > > http://lists.freedesktop.org/mailman/listinfo/spice-devel
>
>
More information about the Spice-devel
mailing list