Thread (28 messages) 28 messages, 4 authors, 2017-09-08

Re: [PATCH 02/10] struct ref_transaction: add a place for backends to store data

From: Michael Haggerty <hidden>
Date: 2017-09-08 08:20:04

On 09/08/2017 09:02 AM, Jeff King wrote:
On Tue, Aug 29, 2017 at 10:20:26AM +0200, Michael Haggerty wrote:
quoted
`packed_ref_store` is going to want to store some transaction-wide
data, so make a place for it.
That makes sense, although...
quoted
diff --git a/refs/refs-internal.h b/refs/refs-internal.h
index b02dc5a7e3..d7d344de73 100644
--- a/refs/refs-internal.h
+++ b/refs/refs-internal.h
@@ -242,6 +242,7 @@ struct ref_transaction {
 	size_t alloc;
 	size_t nr;
 	enum ref_transaction_state state;
+	void *backend_data;
 };
This is just one pointer. Once we start layering ref backends (and
already we're moving towards a "files" layer which sits atop loose and
packed backends, right?), how do we avoid backends stomping on each
other (or worse, dereferencing somebody else's data as their own
struct)?
My conception is that layered backends would be separated as much as
possible, and if the "top" layer needs to modify the "bottom" layer, it
would do so via a separate reference transaction on the bottom layer.
That transaction would be owned by the bottom layer, which would be able
to use the corresponding `backend_data` pointers however it likes.

You can see an example of this construct in patch 08.

Michael
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help