Rework caching of data blocks to eliminate double-caching.
[bluesky.git] / bluesky / cloudlog.c
index 0d91e0d..6b80233 100644 (file)
@@ -132,6 +132,7 @@ void bluesky_cloudlog_unref(BlueSkyCloudLog *log)
         g_hash_table_remove(fs->locations, &log->id);
         g_mutex_unlock(fs->lock);
 
+        log->type = LOGTYPE_INVALID;
         g_mutex_free(log->lock);
         g_cond_free(log->cond);
         g_array_unref(log->pointers);
@@ -190,6 +191,7 @@ BlueSkyCloudPointer bluesky_cloudlog_serialize(BlueSkyCloudLog *log,
         BlueSkyCloudLog *log2
             = (BlueSkyCloudLog *)g_hash_table_lookup(log->fs->locations, &id);
         // TODO: refcount
+        bluesky_cloudlog_fetch(log2);
         g_assert(log2 != NULL);
         bluesky_cloudlog_ref(log2);
         g_mutex_unlock(log->fs->lock);
@@ -247,6 +249,7 @@ void bluesky_cloudlog_write_log(BlueSkyFS *fs)
     while (state->inode_list != NULL) {
         BlueSkyCloudLog *log = (BlueSkyCloudLog *)state->inode_list->data;
         bluesky_cloudlog_serialize(log, state);
+        bluesky_cloudlog_unref(log);
         state->inode_list = g_list_delete_link(state->inode_list,
                                                state->inode_list);
     }