From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NVo1T-0005Lb-Va for qemu-devel@nongnu.org; Fri, 15 Jan 2010 10:23:40 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NVo1P-0005KI-1q for qemu-devel@nongnu.org; Fri, 15 Jan 2010 10:23:39 -0500 Received: from [199.232.76.173] (port=41985 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NVo1O-0005KF-QT for qemu-devel@nongnu.org; Fri, 15 Jan 2010 10:23:34 -0500 Received: from mx1.redhat.com ([209.132.183.28]:40723) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NVo1N-0001Fk-ET for qemu-devel@nongnu.org; Fri, 15 Jan 2010 10:23:34 -0500 Date: Fri, 15 Jan 2010 13:23:21 -0200 From: Luiz Capitulino Message-ID: <20100115132321.786d2841@doriath> In-Reply-To: <1263568563.3536.29.camel@aglitke> References: <1263504010.2847.27.camel@aglitke> <20100115113845.588e2398@doriath> <1263566042.3536.11.camel@aglitke> <20100115130051.024ff95b@doriath> <1263568563.3536.29.camel@aglitke> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: [PATCH][RESPIN] QMP: Emit asynchronous events on all QMP monitors List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Adam Litke Cc: qemu-devel@nongnu.org On Fri, 15 Jan 2010 09:16:03 -0600 Adam Litke wrote: > On Fri, 2010-01-15 at 13:00 -0200, Luiz Capitulino wrote: > > The function will return on the first !QMP Monitor, the > > right QLIST_FOREACH() body is: > > > > if (monitor_ctrl_mode(mon)) { > > monitor_json_emitter(mon, QOBJECT(qmp)); > > } > > > > I'll ACK the respin. > > Ah right, of course. Thanks and here it is. > > When using a control/QMP monitor in tandem with a regular monitor, asynchronous > messages can get lost depending on the order of the QEMU program arguments. > QEMU events issued by monitor_protocol_event() always go to cur_mon. If the > user monitor was specified on the command line first (or it has ,default), the > message will be directed to the user monitor (not the QMP monitor). > Additionally, only one QMP session is currently able to receive async messages. > > To avoid this confusion, scan through the list of monitors and emit the message > on each QMP monitor. > > Signed-off-by: Adam Litke > Acked-by: Luiz Capitulino Now it's good, hope Anthony's script can get a patch from a thread, this is probably good for stable too. Btw, we have a lot of QMP tasks in case you're interested :-) > > diff --git a/monitor.c b/monitor.c > index 134ed15..6a2c7fb 100644 > --- a/monitor.c > +++ b/monitor.c > @@ -334,13 +334,10 @@ void monitor_protocol_event(MonitorEvent event, QObject *data) > { > QDict *qmp; > const char *event_name; > - Monitor *mon = cur_mon; > + Monitor *mon; > > assert(event < QEVENT_MAX); > > - if (!monitor_ctrl_mode(mon)) > - return; > - > switch (event) { > case QEVENT_DEBUG: > event_name = "DEBUG"; > @@ -373,7 +370,11 @@ void monitor_protocol_event(MonitorEvent event, QObject *data) > qdict_put_obj(qmp, "data", data); > } > > - monitor_json_emitter(mon, QOBJECT(qmp)); > + QLIST_FOREACH(mon, &mon_list, entry) { > + if (monitor_ctrl_mode(mon)) { > + monitor_json_emitter(mon, QOBJECT(qmp)); > + } > + } > QDECREF(qmp); > } > > >