Commit 1b4f3ca6 authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

ole32: Merge release code to Release method.

parent a06db6cc
......@@ -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;
if (!ref)
{
TRACE("(%p)\n", This);
ref = InterlockedDecrement(&This->ref);
/*
* 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 the reference count goes down to 0, perform suicide.
*/
if (ref==0)
{
StgStreamImpl_Destroy(This);
if (This->parentStorage)
StorageBaseImpl_RemoveStream(This->parentStorage, This);
This->parentStorage = 0;
HeapFree(GetProcessHeap(), 0, This);
}
return ref;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment