X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=src%2Flaunch.c;h=a60ef7b3a36a4af4d8202652a286ccac878b261a;hb=3a84e0784e1e3ab7b56850d0f8c9aa42f1ae3da1;hp=367d3ff8d37fea52a24c6c38181e9371cde8a8dc;hpb=1e6be6afe58de5bfb1ac056b80d3210888edfead;p=libguestfs.git diff --git a/src/launch.c b/src/launch.c index 367d3ff..a60ef7b 100644 --- a/src/launch.c +++ b/src/launch.c @@ -407,12 +407,15 @@ launch_appliance (guestfs_h *g) /* Start the clock ... */ gettimeofday (&g->launch_t, NULL); + guestfs___launch_send_progress (g, 0); /* Locate and/or build the appliance. */ char *kernel = NULL, *initrd = NULL, *appliance = NULL; if (guestfs___build_appliance (g, &kernel, &initrd, &appliance) == -1) return -1; + guestfs___launch_send_progress (g, 3); + if (g->verbose) guestfs___print_timestamped_message (g, "begin testing qemu features"); @@ -761,6 +764,8 @@ launch_appliance (guestfs_h *g) goto cleanup1; } + guestfs___launch_send_progress (g, 12); + return 0; cleanup1: @@ -862,6 +867,36 @@ connect_unix_socket (guestfs_h *g, const char *sockpath) return -1; } +/* launch (of the ordinary appliance) generates approximate progress + * messages. Currently these are defined as follows: + * + * 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 + * + * Notes: + * (1) This is not a documented ABI and the behaviour may be changed + * or removed in future. + * (2) Messages are only sent if more than 5 seconds has elapsed + * since the launch clock started. + * (3) There is a gross hack in proto.c to make this work. + */ +void +guestfs___launch_send_progress (guestfs_h *g, int perdozen) +{ + struct timeval tv; + + gettimeofday (&tv, NULL); + if (timeval_diff (&g->launch_t, &tv) >= 5000) { + guestfs_progress progress_message = + { .proc = 0, .serial = 0, .position = perdozen, .total = 12 }; + + guestfs___progress_message_callback (g, &progress_message); + } +} + /* Return the location of the tmpdir (eg. "/tmp") and allow users * to override it at runtime using $TMPDIR. * http://www.pathname.com/fhs/pub/fhs-2.3.html#TMPTEMPORARYFILES