aboutsummaryrefslogtreecommitdiffstats
path: root/src/dumm/mconsole.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/dumm/mconsole.c')
-rw-r--r--src/dumm/mconsole.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/dumm/mconsole.c b/src/dumm/mconsole.c
index 77578238b..25cb84621 100644
--- a/src/dumm/mconsole.c
+++ b/src/dumm/mconsole.c
@@ -200,6 +200,31 @@ static char* get_console_pts(private_mconsole_t *this, int con)
}
/**
+ * Poll until guest is ready
+ */
+static bool wait_bootup(private_mconsole_t *this)
+{
+ char *cmd, buf[128];
+ int len, res;
+
+ cmd = "config con0";
+ while (TRUE)
+ {
+ len = sizeof(buf);
+ res = request(this, cmd, buf, &len);
+ if (res < 0)
+ {
+ return FALSE;
+ }
+ if (res == 0)
+ {
+ return TRUE;
+ }
+ usleep(50000);
+ }
+}
+
+/**
* Implementation of mconsole_t.destroy.
*/
static void destroy(private_mconsole_t *this)
@@ -313,6 +338,12 @@ mconsole_t *mconsole_create(char *notify)
}
unlink(notify);
+ if (!wait_bootup(this))
+ {
+ destroy(this);
+ return NULL;
+ }
+
return &this->public;
}