Tiny memory leak in Windows directx driver

Sam,

just doing some memory-leak checking (for TuxPaint) and discovered an
8-byte leak (surface->hwdata) on software DD surfaces.

All DD surfaces have hwdata (contains pointers to DD surface interfaces).

In ‘video/SDL_surface.c’, SDL_FreeSurface() only frees the hwdata
(by calling video->FreeHWSurface()) if the surface flags indicate
that it is a hardware surface.

I propose that this be changed to a test of surface->hwdata as
indicated below. This would be in keeping with other resource
deallocation in this function.

void SDL_FreeSurface (SDL_Surface surface)
{

/
if ( (surface->flags & SDL_HWSURFACE) == SDL_HWSURFACE ) { */
if ( surface->hwdata ) {
SDL_VideoDevice *video = current_video;
SDL_VideoDevice *this = current_video;
video->FreeHWSurface(this, surface);
}

}

cheers,
John.

Sam,

just doing some memory-leak checking (for TuxPaint) and discovered an
8-byte leak (surface->hwdata) on software DD surfaces.

All DD surfaces have hwdata (contains pointers to DD surface interfaces).

In ‘video/SDL_surface.c’, SDL_FreeSurface() only frees the hwdata
(by calling video->FreeHWSurface()) if the surface flags indicate
that it is a hardware surface.

I propose that this be changed to a test of surface->hwdata as
indicated below. This would be in keeping with other resource
deallocation in this function.

void SDL_FreeSurface (SDL_Surface surface)
{

/
if ( (surface->flags & SDL_HWSURFACE) == SDL_HWSURFACE ) { */
if ( surface->hwdata ) {
SDL_VideoDevice *video = current_video;
SDL_VideoDevice *this = current_video;
video->FreeHWSurface(this, surface);
}

}

Thanks, this fix is in CVS. Can you check to make sure it doesn’t break
anything else?

Thanks!
-Sam Lantinga, Software Engineer, Blizzard Entertainment

Thanks, this fix is in CVS. Can you check to make sure it doesn’t break
anything else?

OK.

Examined SDL_CreateRGBSurface() which does most surface creation.
It always sets surface->hwdata = NULL.

Examined XXX_AllocHWSurface() for each driver and
the ones that succeed make sure that surface->hwdata is
non-NULL and freeable by calling XXX_FreeHWSurface().

Examined XXX_FreeHWSurface() for each driver and
the ones that do anything ‘free’ up private stuff and then
set surface->hwdata = NULL.

Functions that do format conversion (or change screen mode)
seem to leave surface->hwdata alone.

Looks like it is safe, :slight_smile:

cheers,
John.> ----- Original Message -----

From: slouken@devolution.com (Sam Lantinga)
To:
Sent: Wednesday, July 03, 2002 5:55 AM
Subject: Re: [SDL] Tiny memory leak in Windows directx driver

Sam,

just doing some memory-leak checking (for TuxPaint) and discovered an
8-byte leak (surface->hwdata) on software DD surfaces.

All DD surfaces have hwdata (contains pointers to DD surface
interfaces).

In ‘video/SDL_surface.c’, SDL_FreeSurface() only frees the hwdata
(by calling video->FreeHWSurface()) if the surface flags indicate
that it is a hardware surface.

I propose that this be changed to a test of surface->hwdata as
indicated below. This would be in keeping with other resource
deallocation in this function.

void SDL_FreeSurface (SDL_Surface surface)
{

/
if ( (surface->flags & SDL_HWSURFACE) == SDL_HWSURFACE ) { */
if ( surface->hwdata ) {
SDL_VideoDevice *video = current_video;
SDL_VideoDevice *this = current_video;
video->FreeHWSurface(this, surface);
}

}

Thanks, this fix is in CVS. Can you check to make sure it doesn’t break
anything else?

Thanks!
-Sam Lantinga, Software Engineer, Blizzard Entertainment


SDL mailing list
SDL at libsdl.org
http://www.libsdl.org/mailman/listinfo/sdl