mirror of https://gitee.com/openkylin/qemu.git
Fix filemonitor test broken with newest Linux kernel
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE2vOm/bJrYpEtDo4/vobrtBUQT98FAl14vtkACgkQvobrtBUQ T9/4DA//QoRu1K1pghGWgD4UmDRh0x6jz7TaKVfHDZFowLlnBbx1Uj48K854dXc9 /BwNwXjS11JGUufZR7vuoOhWLUwinLkcWWQRWiMhB1NsL6Ceuz/ufJXZqBKTP99f qXDR0I8z6WnHHKo+PmxWFXWwpronkqYhNW4fwP/sryuSyRJKm4R5sKKcgDNk59Wf AP8ySXt0C10FyHT21Z4eVjwSxuZLDuwkU9tTvPWQ9tuI2ADJpBbapiq6r8J2fDs8 FhjeaEEW4lrXM5l7G8SCSCjLkGfNISLJi9fI1jqtaSe30Rn9JPziKsNZl3iZRZNr EAlUoTX5sx0FF5Mz94mkRY0UFpWZ3s39Cw4kmVt/28hT5UuulForYEICUJ9UJivp jRzRpjRopp9FWY54p6Hl5sSawR6QIIiIR676QWQ1h/1OnkPWl78W7zpuK7RwnqqZ P5V1tQJ2pSab7qIhwBQ0N8ZZJnYCmemlBCX5kIJL2L8vCXSodf+OzxKl1g7NhCzD OKXBPN6EErd9lI9EPUkj6qwQIhBjv0MxjqCCeQMIcZRW10DgTJBdmCeLMNyEp8os NMSNV7V0VbV4SDnG6Fbv79/M3xAaAFhdXPBqPMWP+aFYeZX3Dv5NNsiruETjV7Xa mwwO/MKFquwrI+mW/mZpQ0Ny27SBOOwr9IgMO8N1tsAfg0JNajU= =uGDi -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/berrange/tags/filemon-test-pull-request' into staging Fix filemonitor test broken with newest Linux kernel # gpg: Signature made Wed 11 Sep 2019 10:31:05 BST # gpg: using RSA key DAF3A6FDB26B62912D0E8E3FBE86EBB415104FDF # gpg: Good signature from "Daniel P. Berrange <dan@berrange.com>" [full] # gpg: aka "Daniel P. Berrange <berrange@redhat.com>" [full] # Primary key fingerprint: DAF3 A6FD B26B 6291 2D0E 8E3F BE86 EBB4 1510 4FDF * remotes/berrange/tags/filemon-test-pull-request: tests: make filemonitor test more robust to event ordering Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
7ff9127862
|
@ -45,6 +45,11 @@ typedef struct {
|
||||||
const char *filedst;
|
const char *filedst;
|
||||||
int64_t *watchid;
|
int64_t *watchid;
|
||||||
int eventid;
|
int eventid;
|
||||||
|
/*
|
||||||
|
* Only valid with OP_EVENT - this event might be
|
||||||
|
* swapped with the next OP_EVENT
|
||||||
|
*/
|
||||||
|
bool swapnext;
|
||||||
} QFileMonitorTestOp;
|
} QFileMonitorTestOp;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -98,6 +103,10 @@ qemu_file_monitor_test_handler(int64_t id,
|
||||||
QFileMonitorTestData *data = opaque;
|
QFileMonitorTestData *data = opaque;
|
||||||
QFileMonitorTestRecord *rec = g_new0(QFileMonitorTestRecord, 1);
|
QFileMonitorTestRecord *rec = g_new0(QFileMonitorTestRecord, 1);
|
||||||
|
|
||||||
|
if (debug) {
|
||||||
|
g_printerr("Queue event id %" PRIx64 " event %d file %s\n",
|
||||||
|
id, event, filename);
|
||||||
|
}
|
||||||
rec->id = id;
|
rec->id = id;
|
||||||
rec->event = event;
|
rec->event = event;
|
||||||
rec->filename = g_strdup(filename);
|
rec->filename = g_strdup(filename);
|
||||||
|
@ -125,7 +134,8 @@ qemu_file_monitor_test_record_free(QFileMonitorTestRecord *rec)
|
||||||
* to wait for the event to be queued for us.
|
* to wait for the event to be queued for us.
|
||||||
*/
|
*/
|
||||||
static QFileMonitorTestRecord *
|
static QFileMonitorTestRecord *
|
||||||
qemu_file_monitor_test_next_record(QFileMonitorTestData *data)
|
qemu_file_monitor_test_next_record(QFileMonitorTestData *data,
|
||||||
|
QFileMonitorTestRecord *pushback)
|
||||||
{
|
{
|
||||||
GTimer *timer = g_timer_new();
|
GTimer *timer = g_timer_new();
|
||||||
QFileMonitorTestRecord *record = NULL;
|
QFileMonitorTestRecord *record = NULL;
|
||||||
|
@ -139,10 +149,16 @@ qemu_file_monitor_test_next_record(QFileMonitorTestData *data)
|
||||||
}
|
}
|
||||||
if (data->records) {
|
if (data->records) {
|
||||||
record = data->records->data;
|
record = data->records->data;
|
||||||
|
if (pushback) {
|
||||||
|
data->records->data = pushback;
|
||||||
|
} else {
|
||||||
tmp = data->records;
|
tmp = data->records;
|
||||||
data->records = g_list_remove_link(data->records, tmp);
|
data->records = g_list_remove_link(data->records, tmp);
|
||||||
g_list_free(tmp);
|
g_list_free(tmp);
|
||||||
}
|
}
|
||||||
|
} else if (pushback) {
|
||||||
|
qemu_file_monitor_test_record_free(pushback);
|
||||||
|
}
|
||||||
qemu_mutex_unlock(&data->lock);
|
qemu_mutex_unlock(&data->lock);
|
||||||
|
|
||||||
g_timer_destroy(timer);
|
g_timer_destroy(timer);
|
||||||
|
@ -158,13 +174,15 @@ static bool
|
||||||
qemu_file_monitor_test_expect(QFileMonitorTestData *data,
|
qemu_file_monitor_test_expect(QFileMonitorTestData *data,
|
||||||
int64_t id,
|
int64_t id,
|
||||||
QFileMonitorEvent event,
|
QFileMonitorEvent event,
|
||||||
const char *filename)
|
const char *filename,
|
||||||
|
bool swapnext)
|
||||||
{
|
{
|
||||||
QFileMonitorTestRecord *rec;
|
QFileMonitorTestRecord *rec;
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
|
|
||||||
rec = qemu_file_monitor_test_next_record(data);
|
rec = qemu_file_monitor_test_next_record(data, NULL);
|
||||||
|
|
||||||
|
retry:
|
||||||
if (!rec) {
|
if (!rec) {
|
||||||
g_printerr("Missing event watch id %" PRIx64 " event %d file %s\n",
|
g_printerr("Missing event watch id %" PRIx64 " event %d file %s\n",
|
||||||
id, event, filename);
|
id, event, filename);
|
||||||
|
@ -172,6 +190,11 @@ qemu_file_monitor_test_expect(QFileMonitorTestData *data,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (id != rec->id) {
|
if (id != rec->id) {
|
||||||
|
if (swapnext) {
|
||||||
|
rec = qemu_file_monitor_test_next_record(data, rec);
|
||||||
|
swapnext = false;
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
g_printerr("Expected watch id %" PRIx64 " but got %" PRIx64 "\n",
|
g_printerr("Expected watch id %" PRIx64 " but got %" PRIx64 "\n",
|
||||||
id, rec->id);
|
id, rec->id);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
@ -347,7 +370,8 @@ test_file_monitor_events(void)
|
||||||
.filesrc = "fish", },
|
.filesrc = "fish", },
|
||||||
{ .type = QFILE_MONITOR_TEST_OP_EVENT,
|
{ .type = QFILE_MONITOR_TEST_OP_EVENT,
|
||||||
.filesrc = "", .watchid = &watch4,
|
.filesrc = "", .watchid = &watch4,
|
||||||
.eventid = QFILE_MONITOR_EVENT_IGNORED },
|
.eventid = QFILE_MONITOR_EVENT_IGNORED,
|
||||||
|
.swapnext = true },
|
||||||
{ .type = QFILE_MONITOR_TEST_OP_EVENT,
|
{ .type = QFILE_MONITOR_TEST_OP_EVENT,
|
||||||
.filesrc = "fish", .watchid = &watch0,
|
.filesrc = "fish", .watchid = &watch0,
|
||||||
.eventid = QFILE_MONITOR_EVENT_DELETED },
|
.eventid = QFILE_MONITOR_EVENT_DELETED },
|
||||||
|
@ -493,8 +517,9 @@ test_file_monitor_events(void)
|
||||||
g_printerr("Event id=%" PRIx64 " event=%d file=%s\n",
|
g_printerr("Event id=%" PRIx64 " event=%d file=%s\n",
|
||||||
*op->watchid, op->eventid, op->filesrc);
|
*op->watchid, op->eventid, op->filesrc);
|
||||||
}
|
}
|
||||||
if (!qemu_file_monitor_test_expect(
|
if (!qemu_file_monitor_test_expect(&data, *op->watchid,
|
||||||
&data, *op->watchid, op->eventid, op->filesrc))
|
op->eventid, op->filesrc,
|
||||||
|
op->swapnext))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
break;
|
break;
|
||||||
case QFILE_MONITOR_TEST_OP_CREATE:
|
case QFILE_MONITOR_TEST_OP_CREATE:
|
||||||
|
|
Loading…
Reference in New Issue