VOID CcInitializeCacheMap(IN PFILE_OBJECT FileObject,
IN PCC_FILE_SIZES FileSizes,IN BOOLEAN PinAccess,IN PCACHE_MANAGER_CALLBACKS CallBacks,IN PVOID LazyWriterContext)
{
+CaptiveSharedCacheMapObject *SharedCacheMap;
+
g_log(G_LOG_DOMAIN,G_LOG_LEVEL_DEBUG,"enter: CcInitializeCacheMap: FileObject=0x%lX,"
"FileSizes,->AllocationSize=0x%lX,->FileSize=0x%lX,->ValidDataLength=0x%lX,"
"PinAccess=%d,Callbacks,LazyWriteContext",
/* VERIFIED: CcInitializeCacheMap() has already 'SectionObjectPointers' allocated. */
g_return_if_fail(FileObject->SectionObjectPointer!=NULL);
- captive_shared_cache_map_get_ref(FileObject,FileSizes,PinAccess,CallBacks,LazyWriterContext);
+ SharedCacheMap=captive_shared_cache_map_get_ref(FileObject,FileSizes,PinAccess,CallBacks,LazyWriterContext);
+
+ captive_shared_cache_map_w32_ref(SharedCacheMap);
+ g_object_unref(SharedCacheMap); /* sink */
g_log(G_LOG_DOMAIN,G_LOG_LEVEL_DEBUG,"leave: CcInitializeCacheMap");
}
else {
SharedCacheMap=captive_FileObject_to_SharedCacheMap(FileObject);
- captive_shared_cache_map_w32_unref(SharedCacheMap);
+ /* We may be called without preceding CcInitializeCacheMap(). */
+ if (!captive_shared_cache_map_query_w32_ref(SharedCacheMap))
+ r=FALSE;
+ else {
+ captive_shared_cache_map_w32_unref(SharedCacheMap);
+ r=(FileObject->SectionObjectPointer->SharedCacheMap==NULL);
+ }
/* FIXME: should we do KePulseEvent? Are we allowed to signal from inside CcUninitializeCacheMap() ? */
if (UninitializeCompleteEvent)
&UninitializeCompleteEvent->Event, /* Event */
IO_NO_INCREMENT, /* Increment */
FALSE); /* Wait */
-
- r=(FileObject->SectionObjectPointer->SharedCacheMap==NULL);
}
g_log(G_LOG_DOMAIN,G_LOG_LEVEL_DEBUG,"leave: CcUninitializeCacheMap: r=%d",r);