mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 11:39:53 +00:00
qemu-io: New command 'sleep'
There is no easy way to check that a request correctly waits for a different request. With a sleep command we can at least approximate it. Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
b35ee7fb23
commit
cd33d02a10
@ -12,6 +12,7 @@
|
||||
#include "block/block_int.h"
|
||||
#include "block/qapi.h"
|
||||
#include "qemu/main-loop.h"
|
||||
#include "qemu/timer.h"
|
||||
|
||||
#define CMD_NOFILE_OK 0x01
|
||||
|
||||
@ -2053,6 +2054,46 @@ static const cmdinfo_t abort_cmd = {
|
||||
.oneline = "simulate a program crash using abort(3)",
|
||||
};
|
||||
|
||||
static void sleep_cb(void *opaque)
|
||||
{
|
||||
bool *expired = opaque;
|
||||
*expired = true;
|
||||
}
|
||||
|
||||
static int sleep_f(BlockDriverState *bs, int argc, char **argv)
|
||||
{
|
||||
char *endptr;
|
||||
long ms;
|
||||
struct QEMUTimer *timer;
|
||||
bool expired = false;
|
||||
|
||||
ms = strtol(argv[1], &endptr, 0);
|
||||
if (ms < 0 || *endptr != '\0') {
|
||||
printf("%s is not a valid number\n", argv[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
timer = timer_new_ns(QEMU_CLOCK_HOST, sleep_cb, &expired);
|
||||
timer_mod(timer, qemu_clock_get_ns(QEMU_CLOCK_HOST) + SCALE_MS * ms);
|
||||
|
||||
while (!expired) {
|
||||
main_loop_wait(false);
|
||||
}
|
||||
|
||||
timer_free(timer);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const cmdinfo_t sleep_cmd = {
|
||||
.name = "sleep",
|
||||
.argmin = 1,
|
||||
.argmax = 1,
|
||||
.cfunc = sleep_f,
|
||||
.flags = CMD_NOFILE_OK,
|
||||
.oneline = "waits for the given value in milliseconds",
|
||||
};
|
||||
|
||||
static void help_oneline(const char *cmd, const cmdinfo_t *ct)
|
||||
{
|
||||
if (cmd) {
|
||||
@ -2166,4 +2207,5 @@ static void __attribute((constructor)) init_qemuio_commands(void)
|
||||
qemuio_add_command(&resume_cmd);
|
||||
qemuio_add_command(&wait_break_cmd);
|
||||
qemuio_add_command(&abort_cmd);
|
||||
qemuio_add_command(&sleep_cmd);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user