From 4bd29d7363e82983dc5a876f86f700dc2cddf685 Mon Sep 17 00:00:00 2001 From: short <> Date: Thu, 9 Oct 2003 09:16:27 +0000 Subject: [PATCH] Fixed CcUninitializeCacheMap() w/o preceding CcInitializeCacheMap(). - Fixes mc(1) file copy to destination Captive filesystem. - Bugreport by the courtesy of Pavouk. --- src/libcaptive/cc/init.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/libcaptive/cc/init.c b/src/libcaptive/cc/init.c index d86a8cf..cdc5a0c 100644 --- a/src/libcaptive/cc/init.c +++ b/src/libcaptive/cc/init.c @@ -48,6 +48,8 @@ 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", @@ -64,7 +66,10 @@ VOID CcInitializeCacheMap(IN PFILE_OBJECT FileObject, /* 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"); } @@ -106,7 +111,13 @@ BOOLEAN r; 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) @@ -114,8 +125,6 @@ BOOLEAN r; &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); -- 1.8.3.1