ddraw: Fix refcounting of palettes
alexd4 at inbox.lv
Sun Mar 16 11:50:41 CDT 2008
Stefan Dösinger wrote:
> Am Sonntag, 16. März 2008 14:44:37 schrieb bobbyg at gmx.net:
>> This fixes a crash in a game called "Autobahnverfolgungsjagd Total"
>> (not in AppDB).
> I think it would be better to set pal = NULL if there is no wined3d palette
> returned a few lines above the place you're changing.
>> While tracing this bug I noticed that
>> IWineD3DBaseSurfaceImpl_GetPalette() does not call AddRef when
>> returning the palette. Is that intentional?
> This looks like it needs a fix
To my knowledge, the way refcounting for IWineD3DPalette currently works,
refcount is always kept equal to 1 during its lifetime, IDirectDrawPalette owns
this reference and releases it when it (ddraw palette) is getting destroyed. So,
the real refcounting is done for ddraw palette and it is omitted in most places
for wined3d palette (which simply gets destroyed together with ddraw palette).
Generally, this seems to work ok. If IWineD3DBaseSurfaceImpl_GetPalette is
changed to call AddRef, then all other places must be fixed too (SetPalette and
callers of IWineD3DBaseSurfaceImpl_GetPalette, possibly others too) or things
may break (leaks etc) and become inconsistent. For example,
IDirectDrawSurfaceImpl_GetPalette does not call Release on interface it gets
More information about the wine-devel