aboutsummaryrefslogtreecommitdiffstats
path: root/prototypes/connections/module-store.h
diff options
context:
space:
mode:
authoreunhhu <[email protected]>2026-09-26 05:39:47 +0100
committereunhhu <[email protected]>2026-09-26 05:39:47 +0100
commite4bc782d09fe1c80098a38380b3959863dfe188f (patch)
treeee8445499e0ef7cabb778811c89de38666d9eff8 /prototypes/connections/module-store.h
parentf0bec42645aa845d1c1d71c6e18ac1521e808fcc (diff)
downloadpure-e4bc782d09fe1c80098a38380b3959863dfe188f.tar.gz
pure-e4bc782d09fe1c80098a38380b3959863dfe188f.zip
Add a store handle that shares one mapping
Opening a draft by path opened the directory and the file, mapped the whole file, read the head, and undid all of it on close: nine system calls for every GET. pure_store_open keeps the store open for one owner thread; drafts opened through it share a reference-counted mapping of the newest version, and opening one only checks whether the file changed (its identity and its head: two system calls). A commit of its drafts maps the new version once and moves them all onto it. A compaction by another writer is noticed and followed, while drafts of the old file keep reading it and relocate their extents when they commit. pure_store_data gives modules the same through a handle.
Diffstat (limited to 'prototypes/connections/module-store.h')
-rw-r--r--prototypes/connections/module-store.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/prototypes/connections/module-store.h b/prototypes/connections/module-store.h
index 0a4b494..d14ab3d 100644
--- a/prototypes/connections/module-store.h
+++ b/prototypes/connections/module-store.h
@@ -5,4 +5,7 @@
* one event opens the message key as a held draft and commits it together
* with the states the event changed. The path outlives the app. */
PureData pure_tree_data(const char *path);
+/* The same through a store handle (state.h): opening a document or state
+ * checks only whether the store changed. The handle outlives the app. */
+PureData pure_store_data(PureStore *);
#endif