7cabbdb70d
Firing watches on the nodes that still exist is relatively easy; just walk the tree and look at the nodes with refcount of one. Firing watches on *deleted* nodes is more fun. We add 'modified_in_tx' and 'deleted_in_tx' flags to each node. Nodes with those flags cannot be shared, as they will always be unique to the transaction in which they were created. When xs_node_walk would need to *create* a node as scaffolding and it encounters a deleted_in_tx node, it can resurrect it simply by clearing its deleted_in_tx flag. If that node originally had any *data*, they're gone, and the modified_in_tx flag will have been set when it was first deleted. We then attempt to send appropriate watches when the transaction is committed, properly delete the deleted_in_tx nodes, and remove the modified_in_tx flag from the others. Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> Reviewed-by: Paul Durrant <paul@xen.org> |
||
---|---|---|
.. | ||
apic.c | ||
clock.c | ||
i8254.c | ||
i8259.c | ||
ioapic.c | ||
meson.build | ||
trace-events | ||
trace.h | ||
xen_evtchn.c | ||
xen_evtchn.h | ||
xen_gnttab.c | ||
xen_gnttab.h | ||
xen_overlay.c | ||
xen_overlay.h | ||
xen_xenstore.c | ||
xen_xenstore.h | ||
xen-stubs.c | ||
xenstore_impl.c | ||
xenstore_impl.h |