Skip to content

Commit

Permalink
monitor: Use QEMU_CLOCK_VIRTUAL for the event queue in qtest mode
Browse files Browse the repository at this point in the history
This allows us to perform tests on the monitor queues to verify that
the rate limits are enforced.

Signed-off-by: Alberto Garcia <berto@igalia.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Message-id: dde511809e954a5c32d5b648bb184c03c89ed5d5.1457610443.git.berto@igalia.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
  • Loading branch information
bertogg authored and XanClic committed Mar 14, 2016
1 parent 6d425eb commit dc59997
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions monitor.c
Expand Up @@ -76,6 +76,7 @@
#include "qapi-event.h"
#include "qmp-introspect.h"
#include "sysemu/block-backend.h"
#include "sysemu/qtest.h"

/* for hmp_info_irq/pic */
#if defined(TARGET_SPARC)
Expand Down Expand Up @@ -232,6 +233,8 @@ static const mon_cmd_t qmp_cmds[];

Monitor *cur_mon;

static QEMUClockType event_clock_type = QEMU_CLOCK_REALTIME;

static void monitor_command_cb(void *opaque, const char *cmdline,
void *readline_opaque);

Expand Down Expand Up @@ -513,7 +516,7 @@ monitor_qapi_event_queue(QAPIEvent event, QDict *qdict, Error **errp)
* monitor_qapi_event_handler() in evconf->rate ns. Any
* events arriving before then will be delayed until then.
*/
int64_t now = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
int64_t now = qemu_clock_get_ns(event_clock_type);

monitor_qapi_event_emit(event, qdict);

Expand All @@ -522,7 +525,7 @@ monitor_qapi_event_queue(QAPIEvent event, QDict *qdict, Error **errp)
evstate->data = data;
QINCREF(evstate->data);
evstate->qdict = NULL;
evstate->timer = timer_new_ns(QEMU_CLOCK_REALTIME,
evstate->timer = timer_new_ns(event_clock_type,
monitor_qapi_event_handler,
evstate);
g_hash_table_add(monitor_qapi_event_state, evstate);
Expand All @@ -547,7 +550,7 @@ static void monitor_qapi_event_handler(void *opaque)
qemu_mutex_lock(&monitor_lock);

if (evstate->qdict) {
int64_t now = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
int64_t now = qemu_clock_get_ns(event_clock_type);

monitor_qapi_event_emit(evstate->event, evstate->qdict);
QDECREF(evstate->qdict);
Expand Down Expand Up @@ -603,6 +606,10 @@ static gboolean qapi_event_throttle_equal(const void *a, const void *b)

static void monitor_qapi_event_init(void)
{
if (qtest_enabled()) {
event_clock_type = QEMU_CLOCK_VIRTUAL;
}

monitor_qapi_event_state = g_hash_table_new(qapi_event_throttle_hash,
qapi_event_throttle_equal);
qmp_event_set_func_emit(monitor_qapi_event_queue);
Expand Down

0 comments on commit dc59997

Please sign in to comment.