A few attempted bugfixes for log data lifetimes.
[bluesky.git] / bluesky / cloudlog.c
index c99d181..1cae4a5 100644 (file)
@@ -165,11 +165,15 @@ BlueSkyCloudPointer bluesky_cloudlog_serialize(BlueSkyCloudLog *log,
         BlueSkyCloudLog *log2
             = (BlueSkyCloudLog *)g_hash_table_lookup(log->fs->locations, &id);
         // TODO: refcount
-        g_mutex_unlock(log->fs->lock);
         g_assert(log2 != NULL);
+        bluesky_cloudlog_ref(log2);
+        g_mutex_unlock(log->fs->lock);
         bluesky_cloudlog_serialize(log2, state);
+        bluesky_cloudlog_unref(log2);
     }
 
+    g_mutex_lock(log->lock);
+    bluesky_cloudlog_fetch(log);
     g_assert(log->data != NULL);
 
     log->location = state->location;
@@ -188,6 +192,7 @@ BlueSkyCloudPointer bluesky_cloudlog_serialize(BlueSkyCloudLog *log,
     g_string_append_len(state->data, log->data->data, log->data->len);
 
     log->location_flags |= CLOUDLOG_CLOUD;
+    g_mutex_unlock(log->lock);
 
     return log->location;
 }