More fixes for memory management.
[bluesky.git] / bluesky / cloudlog.c
index 9243948..ec168e8 100644 (file)
@@ -147,7 +147,10 @@ void bluesky_cloudlog_unref(BlueSkyCloudLog *log)
             return;
         }
 
-        g_hash_table_remove(fs->locations, &log->id);
+        if (!g_hash_table_remove(fs->locations, &log->id)) {
+            if (bluesky_verbose)
+                g_warning("Could not find and remove cloud log item from hash table!");
+        }
         g_mutex_unlock(fs->lock);
 
         bluesky_cloudlog_stats_update(log, -1);
@@ -202,6 +205,9 @@ void bluesky_cloudlog_erase(BlueSkyCloudLog *log)
 {
     g_assert(log->data_lock_count == 0);
 
+    if (log->type == LOGTYPE_UNKNOWN)
+        return;
+
     log->type = LOGTYPE_UNKNOWN;
     log->data_size = 0;
     bluesky_string_unref(log->data);
@@ -253,7 +259,7 @@ BlueSkyCloudLog *bluesky_cloudlog_get(BlueSkyFS *fs, BlueSkyCloudID id)
     item = g_hash_table_lookup(fs->locations, &id);
     if (item == NULL) {
         item = bluesky_cloudlog_new(fs, &id);
-        g_hash_table_insert(fs->locations, &id, item);
+        bluesky_cloudlog_insert_locked(item);
     } else {
         bluesky_cloudlog_ref(item);
     }