More fixes for memory management.
[bluesky.git] / bluesky / imap.c
index 6318256..24144b4 100644 (file)
@@ -203,6 +203,24 @@ void bluesky_inode_map_minimize(BlueSkyFS *fs)
         if (range->serialized != NULL)
             bluesky_cloudlog_erase(range->serialized);
 
+        GSequenceIter *j;
+        for (j = g_sequence_get_begin_iter(range->map_entries);
+             !g_sequence_iter_is_end(j); j = g_sequence_iter_next(j))
+        {
+            InodeMapEntry *entry = (InodeMapEntry *)g_sequence_get(j);
+            BlueSkyCloudLog *item = entry->item;
+            if (item != NULL) {
+                g_mutex_lock(item->lock);
+                if (g_atomic_int_get(&item->refcount) == 1) {
+                    bluesky_cloudlog_erase(item);
+                }
+                g_mutex_unlock(item->lock);
+            } else {
+                g_warning("Null item for inode map entry %"PRIu64"!",
+                          entry->inum);
+            }
+        }
+
         i = g_sequence_iter_next(i);
     }
 }
@@ -307,7 +325,7 @@ gboolean bluesky_checkpoint_load(BlueSkyFS *fs)
     g_mutex_unlock(commit->lock);
 
     bluesky_inode_map_deserialize(fs, commit);
-    //bluesky_cloudlog_unref(commit);
+    bluesky_cloudlog_unref(commit);
 
     return TRUE;
 }