Stefan Dösinger wrote:
Am Sonntag, 16. März 2008 14:44:37 schrieb bobbyg@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 from IWineD3DSurface_GetPalette.