projects
/
bluesky.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Make links between cloud log entries direct.
[bluesky.git]
/
bluesky
/
bluesky-private.h
diff --git
a/bluesky/bluesky-private.h
b/bluesky/bluesky-private.h
index
0f86f45
..
1560c83
100644
(file)
--- a/
bluesky/bluesky-private.h
+++ b/
bluesky/bluesky-private.h
@@
-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);
* 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
gboolean bluesky_deserialize_inode(BlueSkyInode *inode, const gchar *buf);
/* Storage layer. Requests can be performed asynchronously, so these objects
@@
-165,6
+165,7
@@
typedef struct {
} BlueSkyCloudPointer;
typedef enum {
} BlueSkyCloudPointer;
typedef enum {
+ LOGTYPE_INVALID = -1,
LOGTYPE_UNKNOWN = 0,
LOGTYPE_DATA = 1,
LOGTYPE_INODE = 2,
LOGTYPE_UNKNOWN = 0,
LOGTYPE_DATA = 1,
LOGTYPE_INODE = 2,
@@
-206,11
+207,16
@@
struct _BlueSkyCloudLog {
// TODO: Location in journal/cache
int log_seq, log_offset, log_size;
// 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).
+ // 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
+ // around.
BlueSkyRCStr *data;
BlueSkyRCStr *data;
+ int data_lock_count;
};
/* Serialize objects into a log segment to be written to the cloud. */
};
/* Serialize objects into a log segment to be written to the cloud. */