summaryrefslogtreecommitdiffstats
path: root/src/proto.c
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2011-04-01 13:30:48 +0100
committerRichard W.M. Jones <rjones@redhat.com>2011-04-01 16:05:30 +0100
commit371eabfae3790588ed97c0017d2882799c7ea871 (patch)
tree0ec9ba15fabe216a0e83bfb5e2e324d92cd1e045 /src/proto.c
parent02971adc3b0f07f3820d0c5e973fabf16d16deb3 (diff)
downloadlibguestfs-371eabfae3790588ed97c0017d2882799c7ea871.tar.gz
libguestfs-371eabfae3790588ed97c0017d2882799c7ea871.tar.xz
libguestfs-371eabfae3790588ed97c0017d2882799c7ea871.zip
Generate progress messages during launch.
This commit generates approximate progress messages during the guestfs_launch call. Currently this code generates: 0 / 12: launch clock starts 3 / 12: appliance created 6 / 12: detected that guest kernel started 9 / 12: detected that /init script is running 12 / 12: launch completed successfully (Note this is not an ABI and may be changed or removed in a future version). Progress messages are only generated at all if 5 seconds have elapsed since the launch, and they are only generated for the ordinary appliance (not if using attach-method to attach to an existing virtio serial port).
Diffstat (limited to 'src/proto.c')
-rw-r--r--src/proto.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/proto.c b/src/proto.c
index 7cd1d313..63aea68e 100644
--- a/src/proto.c
+++ b/src/proto.c
@@ -285,6 +285,24 @@ read_log_message_or_eof (guestfs_h *g, int fd, int error_if_eof)
/* It's an actual log message, send it upwards if anyone is listening. */
guestfs___call_callbacks_message (g, GUESTFS_EVENT_APPLIANCE, buf, n);
+ /* This is a gross hack. See the comment above
+ * guestfs___launch_send_progress.
+ */
+ if (g->state == LAUNCHING) {
+ const char *sentinel;
+ size_t len;
+
+ sentinel = "Linux version"; /* kernel up */
+ len = strlen (sentinel);
+ if (memmem (buf, n, sentinel, len) != NULL)
+ guestfs___launch_send_progress (g, 6);
+
+ sentinel = "Starting /init script"; /* /init running */
+ len = strlen (sentinel);
+ if (memmem (buf, n, sentinel, len) != NULL)
+ guestfs___launch_send_progress (g, 9);
+ }
+
return 0;
}