From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:43921) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QPLQP-0004mX-SB for qemu-devel@nongnu.org; Wed, 25 May 2011 17:15:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QPLQP-0007ng-0t for qemu-devel@nongnu.org; Wed, 25 May 2011 17:15:29 -0400 Received: from mx1.redhat.com ([209.132.183.28]:19774) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QPLQO-0007nJ-Q6 for qemu-devel@nongnu.org; Wed, 25 May 2011 17:15:28 -0400 Date: Wed, 25 May 2011 18:15:22 -0300 From: Luiz Capitulino Message-ID: <20110525181522.42eb9a70@doriath> In-Reply-To: <1306349281-16913-1-git-send-email-stefanha@linux.vnet.ibm.com> References: <1306349281-16913-1-git-send-email-stefanha@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 1/2] QMP: add get_events(wait=True) option List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi Cc: qemu-devel@nongnu.org On Wed, 25 May 2011 19:48:00 +0100 Stefan Hajnoczi wrote: > The get_events() function polls for new QMP events and then returns. It > can be useful to wait for the next QMP event so add the boolean 'wait' > keyword argument. > > Signed-off-by: Stefan Hajnoczi > --- > QMP/qmp.py | 11 ++++++++--- > 1 files changed, 8 insertions(+), 3 deletions(-) > > diff --git a/QMP/qmp.py b/QMP/qmp.py > index 14ce8b0..2565508 100644 > --- a/QMP/qmp.py > +++ b/QMP/qmp.py > @@ -43,7 +43,7 @@ class QEMUMonitorProtocol: > family = socket.AF_UNIX > return socket.socket(family, socket.SOCK_STREAM) > > - def __json_read(self): > + def __json_read(self, only_event=False): > while True: > data = self.__sockfile.readline() > if not data: > @@ -51,7 +51,8 @@ class QEMUMonitorProtocol: > resp = json.loads(data) > if 'event' in resp: > self.__events.append(resp) > - continue > + if not only_event: > + continue > return resp > > error = socket.error > @@ -106,9 +107,11 @@ class QEMUMonitorProtocol: > qmp_cmd['id'] = id > return self.cmd_obj(qmp_cmd) > > - def get_events(self): > + def get_events(self, wait=False): > """ > Get a list of available QMP events. > + > + @param wait: block until an event is available (bool) > """ > self.__sock.setblocking(0) > try: > @@ -118,6 +121,8 @@ class QEMUMonitorProtocol: > # No data available > pass > self.__sock.setblocking(1) > + if not self.__events and wait: > + self.__json_read(only_event=True) > return self.__events Maybe this is better (untested): def get_events(self, wait=False): """ Get a list of available QMP events. @param wait: block until an event is available (bool) """ if not wait: self.__sock.setblocking(0) try: self.__json_read(only_event=wait) except socket.error, err: if err[0] == errno.EAGAIN: # No data available pass if not wait: self.__sock.setblocking(1) return self.__events > > def clear_events(self):