ole32: Merge release code to Release method.

This commit is contained in:
Nikolay Sivov 2013-04-18 10:16:44 +04:00 committed by Alexandre Julliard
parent a06db6cce5
commit 1b4f3ca6f7

View File

@ -43,40 +43,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(storage);
/***
* This is the destructor of the StgStreamImpl class.
*
* This method will clean-up all the resources used-up by the given StgStreamImpl
* class. The pointer passed-in to this function will be freed and will not
* be valid anymore.
*/
static void StgStreamImpl_Destroy(StgStreamImpl* This)
{
TRACE("(%p)\n", This);
/*
* Release the reference we are holding on the parent storage.
* IStorage_Release(&This->parentStorage->IStorage_iface);
*
* No, don't do this. Some apps call IStorage_Release without
* calling IStream_Release first. If we grab a reference the
* file is not closed, and the app fails when it tries to
* reopen the file (Easy-PC, for example). Just inform the
* storage that we have closed the stream
*/
if(This->parentStorage) {
StorageBaseImpl_RemoveStream(This->parentStorage, This);
}
This->parentStorage = 0;
HeapFree(GetProcessHeap(), 0, This);
}
/***
* This implements the IUnknown method QueryInterface for this
* class
@ -126,17 +92,27 @@ static ULONG WINAPI StgStreamImpl_Release(
IStream* iface)
{
StgStreamImpl* This = impl_from_IStream(iface);
ULONG ref = InterlockedDecrement(&This->ref);
ULONG ref;
ref = InterlockedDecrement(&This->ref);
/*
* If the reference count goes down to 0, perform suicide.
*/
if (ref==0)
if (!ref)
{
StgStreamImpl_Destroy(This);
TRACE("(%p)\n", This);
/*
* Release the reference we are holding on the parent storage.
* IStorage_Release(&This->parentStorage->IStorage_iface);
*
* No, don't do this. Some apps call IStorage_Release without
* calling IStream_Release first. If we grab a reference the
* file is not closed, and the app fails when it tries to
* reopen the file (Easy-PC, for example). Just inform the
* storage that we have closed the stream
*/
if (This->parentStorage)
StorageBaseImpl_RemoveStream(This->parentStorage, This);
This->parentStorage = 0;
HeapFree(GetProcessHeap(), 0, This);
}
return ref;