Improve tracking of memory usage in BlueSky.
[bluesky.git] / bluesky / bluesky-private.h
index 418c1e5..643092b 100644 (file)
@@ -44,7 +44,7 @@ BlueSkyInode *bluesky_list_tail(GList *head);
  * persistent storage. */
 void bluesky_serialize_superblock(GString *out, BlueSkyFS *fs);
 BlueSkyFS *bluesky_deserialize_superblock(const gchar *buf);
-void bluesky_serialize_inode(GString *out, BlueSkyInode *inode);
+BlueSkyCloudLog *bluesky_serialize_inode(BlueSkyInode *inode);
 gboolean bluesky_deserialize_inode(BlueSkyInode *inode, const gchar *buf);
 
 /* Storage layer.  Requests can be performed asynchronously, so these objects
@@ -207,8 +207,10 @@ struct _BlueSkyCloudLog {
     // TODO: Location in journal/cache
     int log_seq, log_offset, log_size;
 
-    // Pointers to other objects
-    GArray *pointers;
+    // Pointers to other objects.  Each link counts towards the reference count
+    // of the pointed-to object.  To avoid memory leaks there should be no
+    // cycles in the reference graph.
+    GArray *links;
 
     // Serialized data, if available in memory (otherwise NULL), and a lock
     // count which tracks if there are users that require the data to be kept
@@ -231,10 +233,13 @@ gchar *bluesky_cloudlog_id_to_string(BlueSkyCloudID id);
 BlueSkyCloudID bluesky_cloudlog_id_from_string(const gchar *idstr);
 void bluesky_cloudlog_ref(BlueSkyCloudLog *log);
 void bluesky_cloudlog_unref(BlueSkyCloudLog *log);
+void bluesky_cloudlog_stats_update(BlueSkyCloudLog *log, int type);
 void bluesky_cloudlog_sync(BlueSkyCloudLog *log);
 void bluesky_cloudlog_insert(BlueSkyCloudLog *log);
-void bluesky_cloudlog_write_log(BlueSkyFS *fs);
 void bluesky_cloudlog_fetch(BlueSkyCloudLog *log);
+BlueSkyCloudPointer bluesky_cloudlog_serialize(BlueSkyCloudLog *log,
+                                               BlueSkyFS *fs);
+void bluesky_cloudlog_flush(BlueSkyFS *fs);
 
 /* Logging infrastructure for ensuring operations are persistently recorded to
  * disk. */