
On Tue, Sep 11, 2012 at 05:34:55PM -0600, Eric Blake wrote:
On 09/11/2012 05:26 PM, Eric Blake wrote:
On 09/11/2012 08:11 AM, Daniel P. Berrange wrote:
From: "Daniel P. Berrange" <berrange@redhat.com>
Technically speaking we should wait until we receive the QMP greeting message before attempting to send any QMP monitor commands. Mostly we've got away with this, but there is a race in some QEMU which cause it to SEGV if you sent it data too soon after startup. Waiting for the QMP greeting avoids the race
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/qemu/qemu_monitor.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
ACK.
Spoke too soon. This makes the testsuite hang in qemumonitorjsontest, as the fake json monitor never manages to trigger the wait_greeting reset to 0. I'm not sure how best to fix the infloop, but that is needed before this patch can go in.
Oh, the fix is to actually send the expected greeting, as a normal QEMU would :-) The following patch prevents a hang in the test suite for me. Can you confirm: diff --git a/tests/qemumonitortestutils.c b/tests/qemumonitortestutils.c index 76b11e6..77e9a47 100644 --- a/tests/qemumonitortestutils.c +++ b/tests/qemumonitortestutils.c @@ -418,6 +418,9 @@ static qemuMonitorCallbacks qemuCallbacks = { .errorNotify = qemuMonitorTestErrorNotify, }; +#define QEMU_JSON_GREETING "{\"QMP\": {\"version\": {\"qemu\": {\"micro\": 1, \"minor\": 0, \"major\": 1}, \"package\": \" (qemu-kvm-1.0.1)\"}, \"capabilities\ +#define QEMU_TEXT_GREETING "QEMU 1.0,1 monitor - type 'help' for more information" + qemuMonitorTestPtr qemuMonitorTestNew(bool json, virCapsPtr caps) { qemuMonitorTestPtr test; @@ -468,8 +471,13 @@ qemuMonitorTestPtr qemuMonitorTestNew(bool json, virCapsPtr caps) if (!test->client) goto error; + if (qemuMonitorTestAddReponse(test, json ? + QEMU_JSON_GREETING : + QEMU_TEXT_GREETING) < 0) + goto error; + if (virNetSocketAddIOCallback(test->client, - VIR_EVENT_HANDLE_READABLE, + VIR_EVENT_HANDLE_WRITABLE, qemuMonitorTestIO, test, NULL) < 0) Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|