diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2011-04-01 13:30:48 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2011-04-01 16:05:30 +0100 |
commit | 371eabfae3790588ed97c0017d2882799c7ea871 (patch) | |
tree | 0ec9ba15fabe216a0e83bfb5e2e324d92cd1e045 /src/proto.c | |
parent | 02971adc3b0f07f3820d0c5e973fabf16d16deb3 (diff) | |
download | libguestfs-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.c | 18 |
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; } |