ole32: Always invalidate stream objects when deleting the stream.

This commit is contained in:
Vincent Povirk 2009-11-18 10:22:50 -06:00 committed by Alexandre Julliard
parent a2c405fa15
commit 9d0c4c971d
2 changed files with 13 additions and 12 deletions

View File

@ -823,17 +823,6 @@ static HRESULT WINAPI StorageBaseImpl_CreateStream(
*/
if (STGM_CREATE_MODE(grfMode) == STGM_CREATE)
{
StgStreamImpl *strm;
LIST_FOR_EACH_ENTRY(strm, &This->strmHead, StgStreamImpl, StrmListEntry)
{
if (strm->dirEntry == currentEntryRef)
{
TRACE("Stream deleted %p\n", strm);
strm->parentStorage = NULL;
list_remove(&strm->StrmListEntry);
}
}
IStorage_DestroyElement(iface, pwcsName);
}
else
@ -1914,6 +1903,18 @@ static HRESULT deleteStreamContents(
IStream *pis;
HRESULT hr;
ULARGE_INTEGER size;
StgStreamImpl *strm;
/* Invalidate any open stream objects. */
LIST_FOR_EACH_ENTRY(strm, &parentStorage->strmHead, StgStreamImpl, StrmListEntry)
{
if (strm->dirEntry == indexToDelete)
{
TRACE("Stream deleted %p\n", strm);
strm->parentStorage = NULL;
list_remove(&strm->StrmListEntry);
}
}
size.u.HighPart = 0;
size.u.LowPart = 0;

View File

@ -1121,7 +1121,7 @@ static void test_substorage_share(void)
ok(r==S_OK, "IStorage->DestroyElement failed, hr=%08x\n", r);
r = IStream_Write(stm, "this shouldn't work\n", 20, NULL);
todo_wine ok(r==STG_E_REVERTED, "IStream_Write should fail %08x\n", r);
ok(r==STG_E_REVERTED, "IStream_Write should fail %08x\n", r);
IStorage_Release(stm);
}