You could have a function to explicitly destroy the object, regardless of reference count. However, I think that one already got mentioned last time :-)
:-) Yes, that was mentioned, and indeed I have one internal function, mainly for code readability. The problem is that I can't destroy the sublevel surfaces when the root surface is destroyed, I have to wait until the WineD3DTexture is destroyed. In most cases, this is equal, and the root surface holds the only reference to the WineD3DTexture, but in some cases WineD3D holds an internal reference. If I just destroy the sublevels with the root, then WineD3D will get angry(aka crash) because I take away the Textures surfaces. The first wineD3D surface survives because it's parent is an IParent object, and destroying the root surface does only Release the WineD3DTexture, not the WineD3DSurface.