Re: [AD] [4.4]/[4.2] [Windows] Problems with gfx_gdi_init()/gfx_gdi_exit()

[ Thread Index | Date Index | More lists.liballeg.org/allegro-developers Archives ]


On 2011-03-15, Andrei Ellman <ae-a-alleg@xxxxxxxxxx> wrote:
> On 22/02/2011 01:06, Peter Wang wrote:
> >On 2011-02-21, Andrei Ellman<ae-a-alleg@xxxxxxxxxx>  wrote:
> >>Hi,
> >>
> >>In Windows (using Allegro 4.2.3.1) if I successfully set a graphics mode
> >>using the GFX_GDI driver and then set a different mode using GFX_GDI
> >>that causes gfx_gdi_init() to fail, then a crash occurs in gfx_gdi_exit().
> >>
> >>When examining wgdi.c, in gfx_gdi_exit() I noticed that 'screen_surf' is
> >>not set to NULL once it has been free()'d, which was the cause of the
> >>crash (as it was already free()'d on the previous successful removal of
> >>that mode). Also, I notice that _AL_FREE(gdi_dirty_lines); and
> >>_AL_FREE(screen_surf); don't check to see if the pointer is NULL.
> >>Although 'gdi_screen' is set to NULL, none of it's associated
> >>datastructures (as allocated in _make_bitmap()) are free()'d, causing a
> >>memory-leak. Also, in gfx_gdi_init(), there are no checks done to see if
> >>_AL_MALLOC_ATOMIC() or _make_bitmap() return NULL.
> >>
> >>The code of wgdi.c is identical in 4.2.3.1 and 4.4.1.1 so any fix could
> >>be applied to both branches.
> >>
> >A patch would be appreciated.
> >
> >Peter
> 
> 
> At last, I've found some time to look into this and have produced a
> patch. The patch addresses all the issues I mentioned (wgdi.c.diff)
> (and one I didn't mention (wddovl.c.diff)) except the one about the
> memory-leak which turned out to be a non-issue as the bitmap is
> free()'d by the caller.

Thanks.  I have applied your patches to the 4.4 branch.

Peter




Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/