summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/guestfs.c8
-rw-r--r--src/launch.c10
2 files changed, 18 insertions, 0 deletions
diff --git a/src/guestfs.c b/src/guestfs.c
index 31968e4e..3607eaad 100644
--- a/src/guestfs.c
+++ b/src/guestfs.c
@@ -190,9 +190,17 @@ guestfs_close (guestfs_h *g)
if (g->autosync && g->state == READY)
guestfs_internal_autosync (g);
+ /* If we are valgrinding the daemon, then we *don't* want to kill
+ * the subprocess because we want the final valgrind messages sent
+ * when we close sockets below. However for normal production use,
+ * killing the subprocess is the right thing to do (in case the
+ * daemon or qemu is not responding).
+ */
+#ifndef VALGRIND_DAEMON
/* Kill the qemu subprocess. */
if (g->state != CONFIG)
guestfs_kill_subprocess (g);
+#endif
/* Run user close callbacks. */
guestfs___call_callbacks_void (g, GUESTFS_EVENT_CLOSE);
diff --git a/src/launch.c b/src/launch.c
index 1af74b99..4e2fba9d 100644
--- a/src/launch.c
+++ b/src/launch.c
@@ -703,6 +703,16 @@ launch_appliance (guestfs_h *g)
add_cmdline (g, "-device");
add_cmdline (g, "virtserialport,chardev=channel0,name=org.libguestfs.channel.0");
+#ifdef VALGRIND_DAEMON
+ /* Set up virtio-serial channel for valgrind messages. */
+ add_cmdline (g, "-chardev");
+ snprintf (buf, sizeof buf, "file,path=%s/valgrind.log.%d,id=valgrind",
+ VALGRIND_LOG_PATH, getpid ());
+ add_cmdline (g, buf);
+ add_cmdline (g, "-device");
+ add_cmdline (g, "virtserialport,chardev=valgrind,name=org.libguestfs.valgrind");
+#endif
+
/* Enable user networking. */
if (g->enable_network) {
add_cmdline (g, "-netdev");