STORE_OP_GET,
STORE_OP_PUT,
STORE_OP_DELETE,
+ STORE_OP_BARRIER, // Waits for other selected operations to complete
} BlueSkyStoreOp;
typedef enum {
ASYNC_COMPLETE, // Operation finished, results available
} BlueSkyAsyncStatus;
+struct BlueSkyNotifierList;
typedef struct {
BlueSkyStore *store;
BlueSkyRCStr *data; /* Data read/to write */
int result; /* Result code; 0 for success. */
+ struct BlueSkyNotifierList *notifiers;
gpointer store_private; /* For use by the storage implementation */
} BlueSkyStoreAsync;
+/* Support for notification lists. These are lists of one-shot functions which
+ * can be called when certain events--primarily, competed storage
+ * events--occur. Multiple notifiers can be added, but no particular order is
+ * guaranteed for the notification functions to be called. */
+struct BlueSkyNotifierList {
+ struct BlueSkyNotifierList *next;
+ GFunc func;
+ BlueSkyStoreAsync *async;
+ gpointer user_data; // Passed to the function when called
+};
+
/* The abstraction layer for storage, allowing multiple implementations. */
typedef struct {
/* Create a new store instance and return a handle to it. */
void bluesky_store_async_ref(BlueSkyStoreAsync *async);
void bluesky_store_async_unref(BlueSkyStoreAsync *async);
void bluesky_store_async_wait(BlueSkyStoreAsync *async);
+void bluesky_store_async_add_notifier(BlueSkyStoreAsync *async,
+ GFunc func, gpointer user_data);
void bluesky_store_async_mark_complete(BlueSkyStoreAsync *async);
void bluesky_store_async_submit(BlueSkyStoreAsync *async);
void bluesky_store_sync(BlueSkyStore *store);
+void bluesky_store_add_barrier(BlueSkyStoreAsync *barrier,
+ BlueSkyStoreAsync *async);
+
+void bluesky_inode_start_sync(BlueSkyInode *inode, BlueSkyStoreAsync *barrier);
+
+void bluesky_block_flush(BlueSkyFS *fs, BlueSkyBlock *block,
+ BlueSkyStoreAsync *barrier);
+void bluesky_file_flush(BlueSkyInode *inode, BlueSkyStoreAsync *barrier);
+
#ifdef __cplusplus
}
#endif