From 3060cb6c7a792d50cbaa2164b13774596a08577e Mon Sep 17 00:00:00 2001
From: APriestman <apriestman@basistech.com>
Date: Fri, 25 Oct 2013 13:32:49 -0400
Subject: [PATCH] Fixed bug in yaffs2 cleanup

---
 tsk/fs/yaffs.cpp | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/tsk/fs/yaffs.cpp b/tsk/fs/yaffs.cpp
index d64504f1c..66cb60489 100644
--- a/tsk/fs/yaffs.cpp
+++ b/tsk/fs/yaffs.cpp
@@ -634,20 +634,22 @@ static void
 static void
     yaffscache_chunks_free(YAFFSFS_INFO *yfs)
 {
-    // Free the YaffsCacheChunks in each ChunkGroup
-    std::map<unsigned int,YaffsCacheChunkGroup>::iterator iter;
-    for( iter = yfs->chunkMap->begin(); iter != yfs->chunkMap->end(); ++iter ) {
-        YaffsCacheChunk *chunk = yfs->chunkMap->operator[](iter->first).cache_chunks_head;
-        while(chunk != NULL) {
-            YaffsCacheChunk *to_free = chunk;
-            chunk = chunk->ycc_next;
-            free(to_free);
+    if(yfs->chunkMap != NULL){
+        // Free the YaffsCacheChunks in each ChunkGroup
+        std::map<unsigned int,YaffsCacheChunkGroup>::iterator iter;
+        for( iter = yfs->chunkMap->begin(); iter != yfs->chunkMap->end(); ++iter ) {
+            YaffsCacheChunk *chunk = yfs->chunkMap->operator[](iter->first).cache_chunks_head;
+            while(chunk != NULL) {
+                YaffsCacheChunk *to_free = chunk;
+                chunk = chunk->ycc_next;
+                free(to_free);
+            }
         }
-    }
 
-    // Free the map
-    yfs->chunkMap->clear();
-    delete yfs->chunkMap;
+        // Free the map
+        yfs->chunkMap->clear();
+        delete yfs->chunkMap;
+	}
 
 }
 
@@ -2459,7 +2461,10 @@ static void
 
     // Walk and free the cache structures
     yaffscache_objects_free(yfs);
+	fprintf(stderr, "After objects free\n");
+	fflush(stderr);
     yaffscache_chunks_free(yfs);
+	fprintf(stderr, "After chunks free\n");
 
     //tsk_deinit_lock(&yaffsfs->lock);
 
-- 
GitLab