On Tue, Jan 31, 2023 at 05:32:11PM +0100, Peter Krempa wrote:
Rollback of FD sets passed to qemu is also needed after possible restart
of libvirtd when we need to serialize the data into status XML. For this
purpose we need to access the fdset ID once it was passed to qemu and
potentially re-create a 'qemuFDPass' struct in passed state.

Introduce 'qemuFDPassNewPassed' and 'qemuFDPassIsPassed'.

Signed-off-by: Peter Krempa <pkre...@redhat.com>
---
src/qemu/qemu_fd.c | 41 +++++++++++++++++++++++++++++++++++++++++
src/qemu/qemu_fd.h |  7 +++++++
2 files changed, 48 insertions(+)

diff --git a/src/qemu/qemu_fd.c b/src/qemu/qemu_fd.c
index ebeeb65505..9eaaa098ee 100644
--- a/src/qemu/qemu_fd.c
+++ b/src/qemu/qemu_fd.c
@@ -96,6 +96,47 @@ qemuFDPassNew(const char *prefix,
}


+/**
+ * qemuFDPassNewPassed:
+ * @fdSetID: ID of an FDset which was allready passed to qemu
+ *
+ * Create qemuFDPass pointing to an already passed FD. Useful to usw with
+ * qemuFDPassTransferMonitorRollback, when restoring after restart.
+ */
+qemuFDPass *
+qemuFDPassNewPassed(unsigned int fdSetID)
+{
+    qemuFDPass *fdpass = g_new0(qemuFDPass, 1);
+
+    fdpass->fdSetID = fdSetID;
+    fdpass->passed = true;
+
+    return fdpass;
+}
+
+
+/**
+ * qemuFDPassIsPassed:
+ * @fdpass: The fd passing helper struct
+ * @id: when non-NULL filled with the fdset ID
+ *
+ * Returns true if @fdpass was passed to qemu. In such case @id is also filled
+ * with the ID of the fdset if non-NULL.
+ */
+bool
+qemuFDPassIsPassed(qemuFDPass *fdpass,
+                   unsigned *id)
+{
+    if (!fdpass)
+        return false;

Shouldn't this rather be like this?

if (!fdpass || !fdpass->passed)
    return false;

+
+    if (id)
+        *id = fdpass->fdSetID;
+
+    return true;
+}
+
+
/**
 * qemuFDPassAddFD:
 * @fdpass: The fd passing helper struct
diff --git a/src/qemu/qemu_fd.h b/src/qemu/qemu_fd.h
index 032b9442ee..cd0ff2c690 100644
--- a/src/qemu/qemu_fd.h
+++ b/src/qemu/qemu_fd.h
@@ -31,6 +31,13 @@ qemuFDPass *
qemuFDPassNew(const char *prefix,
              void *dompriv);

+qemuFDPass *
+qemuFDPassNewPassed(unsigned int fdSetID);
+
+bool
+qemuFDPassIsPassed(qemuFDPass *fdpass,
+                   unsigned *id);
+
void
qemuFDPassAddFD(qemuFDPass *fdpass,
                int *fd,
--
2.39.1

Attachment: signature.asc
Description: PGP signature

Reply via email to