mirror of
https://github.com/reactos/wine.git
synced 2025-02-21 13:23:25 +00:00
ole32: Merge release code to Release method.
This commit is contained in:
parent
a06db6cce5
commit
1b4f3ca6f7
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user