mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
monitor: Rework modal password input (Jan Kiszka)
Currently, waiting for the user to type in some password blocks the whole VM because monitor_readline starts its own I/O loop. And this loop also screws up reading passwords from virtual console. Patch below fixes the shortcomings by using normal I/O processing also for waiting on a password. To keep to modal property for the monitor terminal, the command handler is temporarily replaced by a password handler and a callback infrastructure is established to process the result before switching back to command mode. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6710 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
9dd442b123
commit
bb5fc20f7c
6 changed files with 108 additions and 65 deletions
21
block.c
21
block.c
|
@ -430,11 +430,12 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags,
|
|||
}
|
||||
}
|
||||
|
||||
/* call the change callback */
|
||||
bs->media_changed = 1;
|
||||
if (bs->change_cb)
|
||||
bs->change_cb(bs->change_opaque);
|
||||
|
||||
if (!bdrv_key_required(bs)) {
|
||||
/* call the change callback */
|
||||
bs->media_changed = 1;
|
||||
if (bs->change_cb)
|
||||
bs->change_cb(bs->change_opaque);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -989,7 +990,15 @@ int bdrv_set_key(BlockDriverState *bs, const char *key)
|
|||
if (!bs->encrypted || !bs->drv || !bs->drv->bdrv_set_key)
|
||||
return -1;
|
||||
ret = bs->drv->bdrv_set_key(bs, key);
|
||||
bs->valid_key = (ret == 0);
|
||||
if (ret < 0) {
|
||||
bs->valid_key = 0;
|
||||
} else if (!bs->valid_key) {
|
||||
bs->valid_key = 1;
|
||||
/* call the change callback now, we skipped it on open */
|
||||
bs->media_changed = 1;
|
||||
if (bs->change_cb)
|
||||
bs->change_cb(bs->change_opaque);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue