return res;
}
+ if (replay_mode == REPLAY_MODE_RECORD) {
+ /*
+ * When recording we don't want temporary conditions to
+ * perturb the result. By ensuring we write everything we can
+ * while recording we avoid playback being out of sync if it
+ * doesn't encounter the same temporary conditions (usually
+ * triggered by external programs not reading the chardev fast
+ * enough and pipes filling up).
+ */
+ write_all = true;
+ }
+
res = qemu_chr_write_buffer(s, buf, len, &offset, write_all);
if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
if (object_class_is_abstract(oc)) {
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "driver",
- "an abstract device type");
+ "a non-abstract device type");
return NULL;
}
value->label = g_strdup(chr->label);
value->filename = g_strdup(chr->filename);
- value->frontend_open = chr->be && chr->be->fe_open;
+ value->frontend_open = chr->be && chr->be->fe_is_open;
QAPI_LIST_PREPEND(*list, value);