A few attempted bugfixes for log data lifetimes.
[bluesky.git] / bluesky / bluesky-private.h
index 60c10c1..0f86f45 100644 (file)
@@ -230,6 +230,7 @@ void bluesky_cloudlog_unref(BlueSkyCloudLog *log);
 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);
 
 /* Logging infrastructure for ensuring operations are persistently recorded to
  * disk. */
@@ -240,8 +241,24 @@ uint32_t crc32c_finalize(uint32_t crc);
 struct _BlueSkyLog {
     char *log_directory;
     GAsyncQueue *queue;
-    int fd;
+    int fd, dirfd;
     int seq_num;
+    GSList *committed;
+
+    /* Cache of log segments which have been memory-mapped. */
+    GMutex *mmap_lock;
+    GHashTable *mmap_cache;
+};
+
+/* Reference-counted blocks of memory, used for passing data in and out of
+ * storage backends and in other places.  This may also refer to read-only
+ * mmaped data. */
+struct _BlueSkyMmap {
+    gint refcount;
+    int log_seq;
+    const char *addr;
+    size_t len;
+    BlueSkyLog *log;
 };
 
 BlueSkyLog *bluesky_log_new(const char *log_directory);
@@ -249,6 +266,7 @@ void bluesky_log_item_submit(BlueSkyCloudLog *item, BlueSkyLog *log);
 void bluesky_log_finish_all(GList *log_items);
 BlueSkyRCStr *bluesky_log_map_object(BlueSkyLog *log, int log_seq,
                                      int log_offset, int log_size);
+void bluesky_mmap_unref(BlueSkyMmap *mmap);
 
 #ifdef __cplusplus
 }