Only treat an async storage operation as finished when notifiers finish.
[bluesky.git] / bluesky / bluesky-private.h
index 95fc7d5..058c5bd 100644 (file)
@@ -63,6 +63,9 @@ typedef struct {
 
     int result;                 /* Result code; 0 for success. */
     struct BlueSkyNotifierList *notifiers;
+    gint notifier_count;
+
+    bluesky_time_hires start_time;  /* Time operation was submitted. */
 
     gpointer store_private;     /* For use by the storage implementation */
 } BlueSkyStoreAsync;
@@ -81,7 +84,7 @@ struct BlueSkyNotifierList {
 /* The abstraction layer for storage, allowing multiple implementations. */
 typedef struct {
     /* Create a new store instance and return a handle to it. */
-    gpointer (*create)();
+    gpointer (*create)(const gchar *path);
 
     /* Clean up any resources used by this store. */
     void (*destroy)(gpointer store);
@@ -98,6 +101,7 @@ void bluesky_store_register(const BlueSkyStoreImplementation *impl,
                             const gchar *name);
 
 BlueSkyStoreAsync *bluesky_store_async_new(BlueSkyStore *store);
+gpointer bluesky_store_async_get_handle(BlueSkyStoreAsync *async);
 void bluesky_store_async_ref(BlueSkyStoreAsync *async);
 void bluesky_store_async_unref(BlueSkyStoreAsync *async);
 void bluesky_store_async_wait(BlueSkyStoreAsync *async);
@@ -112,9 +116,13 @@ void bluesky_store_add_barrier(BlueSkyStoreAsync *barrier,
 
 void bluesky_inode_start_sync(BlueSkyInode *inode, BlueSkyStoreAsync *barrier);
 
+void bluesky_block_touch(BlueSkyInode *inode, uint64_t i);
+void bluesky_block_fetch(BlueSkyFS *fs, BlueSkyBlock *block,
+                         BlueSkyStoreAsync *barrier);
 void bluesky_block_flush(BlueSkyFS *fs, BlueSkyBlock *block,
                          BlueSkyStoreAsync *barrier);
 void bluesky_file_flush(BlueSkyInode *inode, BlueSkyStoreAsync *barrier);
+void bluesky_file_drop_cached(BlueSkyInode *inode);
 
 #ifdef __cplusplus
 }