*** GMX Spamverdacht *** Re : [DDRAW] Only detach surfaces when releasing a non-texture surface attached to a complex root.

Stefan Dösinger stefandoesinger at gmx.at
Thu Sep 7 16:00:51 CDT 2006


Hi,
> Well I don't understand, what leaks ? Complex attached surfaces are still
> destroyed when we fire the root. The new patch takes Moto Racer 2 memleak
> issues in hand, and Nomad Soul leaks may not be related to this — not a
> regression because exiting led to crash before ( and remaining surfaces are
> simple surfaces ). In fact i was a bit unfresh when i posted the patch :P
> ..
My wait, I think I still do not really get what happens here...

Nomad Soul calls Release on the back buffer until it returns 0? Something like

while(Backbuffer->Release()); ?

Does it do that before releasing the front buffer, or after? I thought after 
releasing the front buffer, because that was some odd behavior reported with 
dune2000 which went away mysteriously...

Your patch, if I get it correctly, calls DeleteAttachedSurface only on the 
surface that is actually destroyed. If a surface is destroyed that is 
attached to a complex root then nothing else is done.

Just some questions to make sure I understand correctly:

* If the front buffer is destroyed and a z buffer attached to the back buffer, 
the z buffer will not get detached when back buffer is destroyed? So the 
reference to the z buffer will hang and the app crash will eventually when 
zbuffer->first_attached is accessed?

* If the back buffer is explicitly released so its refcount falls to 0 before 
the front buffer is destroyed, the z buffer is detached but nothing else 
happens. The back buffer will be destroyed when the front buffer is 
destroyed?

What does nomad soul do if you just return 0 when the ref of the back buffer 
falls to 0?

E.g

if(ref == 0)
{
    if(This->first_complex != this)
    {
        WARN("Attempt to destroy a surface that is attached to a complex 
root\n");
        return 0;
    }
}

And leave the rest as it is. That would be correct according to the msdn("A 
complex attached surface can only be destroyed by destroying the root"). I 
always thought this is enforced simply by the refcount, but well...

DDraw refcouting is horrible :-/ MS placed a lot of appcompat hacks into 
it(see the tests), and I already had loads of fun with it. I'm afraid that 
this will be fun for the future too...
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://www.winehq.org/pipermail/wine-devel/attachments/20060907/31af859a/attachment.pgp


More information about the wine-devel mailing list