Commit 1b244baf authored by Rob Shearman's avatar Rob Shearman Committed by Alexandre Julliard

ole32: Fix HandsOffStorage in the data cache.

parent 6235ac9f
...@@ -739,6 +739,15 @@ static inline HRESULT DataCacheEntry_DiscardData(DataCacheEntry *This) ...@@ -739,6 +739,15 @@ static inline HRESULT DataCacheEntry_DiscardData(DataCacheEntry *This)
return S_OK; return S_OK;
} }
static inline void DataCacheEntry_HandsOffStorage(DataCacheEntry *This)
{
if (This->storage)
{
IStorage_Release(This->storage);
This->storage = NULL;
}
}
/********************************************************* /*********************************************************
* Method implementation for the non delegating IUnknown * Method implementation for the non delegating IUnknown
* part of the DataCache class. * part of the DataCache class.
...@@ -1469,6 +1478,7 @@ static HRESULT WINAPI DataCache_HandsOffStorage( ...@@ -1469,6 +1478,7 @@ static HRESULT WINAPI DataCache_HandsOffStorage(
IPersistStorage* iface) IPersistStorage* iface)
{ {
DataCache *this = impl_from_IPersistStorage(iface); DataCache *this = impl_from_IPersistStorage(iface);
DataCacheEntry *cache_entry;
TRACE("(%p)\n", iface); TRACE("(%p)\n", iface);
...@@ -1478,6 +1488,9 @@ static HRESULT WINAPI DataCache_HandsOffStorage( ...@@ -1478,6 +1488,9 @@ static HRESULT WINAPI DataCache_HandsOffStorage(
this->presentationStorage = NULL; this->presentationStorage = NULL;
} }
LIST_FOR_EACH_ENTRY(cache_entry, &this->cache_list, DataCacheEntry, entry)
DataCacheEntry_HandsOffStorage(cache_entry);
return S_OK; return S_OK;
} }
......
...@@ -1273,9 +1273,7 @@ static void test_data_cache(void) ...@@ -1273,9 +1273,7 @@ static void test_data_cache(void)
hr = IOleCache2_DiscardCache(pOleCache, DISCARDCACHE_NOSAVE); hr = IOleCache2_DiscardCache(pOleCache, DISCARDCACHE_NOSAVE);
ok_ole_success(hr, "IOleCache2_DiscardCache"); ok_ole_success(hr, "IOleCache2_DiscardCache");
hr = IViewObject_Draw(pViewObject, DVASPECT_ICON, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, draw_continue, 0xdeadbeef); hr = IViewObject_Draw(pViewObject, DVASPECT_ICON, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, draw_continue, 0xdeadbeef);
todo_wine {
ok(hr == OLE_E_BLANK, "IViewObject_Draw with uncached aspect should have returned OLE_E_BLANK instead of 0x%08x\n", hr); ok(hr == OLE_E_BLANK, "IViewObject_Draw with uncached aspect should have returned OLE_E_BLANK instead of 0x%08x\n", hr);
}
DeleteDC(hdcMem); DeleteDC(hdcMem);
......
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