From patchwork Thu Sep 21 16:47:08 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Euan Harris X-Patchwork-Id: 9964289 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 92081602D8 for ; Thu, 21 Sep 2017 16:49:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 86BA92956F for ; Thu, 21 Sep 2017 16:49:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7B86829600; Thu, 21 Sep 2017 16:49:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 31F172956F for ; Thu, 21 Sep 2017 16:49:43 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dv4dI-0001hv-1z; Thu, 21 Sep 2017 16:47:24 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dv4dG-0001hJ-9X for xen-devel@lists.xenproject.org; Thu, 21 Sep 2017 16:47:22 +0000 Received: from [85.158.137.68] by server-11.bemta-3.messagelabs.com id F1/F4-01812-91DE3C95; Thu, 21 Sep 2017 16:47:21 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprGIsWRWlGSWpSXmKPExsXitHRDpK7k28O RBpe+8ll83zKZyYHR4/CHKywBjFGsmXlJ+RUJrBkdH06zFCzlq7g8r5e9gXEVdxcjJ4eEgL/E jvfrWUFsNgEtid0fFrJ3MXJwiAioSNzeawASZhbwllg5/ThYibCAr8Tqzj/MIDaLgKrE9o+vW UBsXgE3ifcPupkgRipITHn4HqyGU8Bd4vGszWC2EFDNrL3drBC2ssSHK2vYIXoFJU7OfMICsU tC4uCLF8wTGHlnIUnNQpJawMi0ilGjOLWoLLVI19BSL6koMz2jJDcxM0fX0MBYLze1uDgxPTU nMalYLzk/dxMjMHTqGRgYdzD+Pu53iFGSg0lJlPfA08ORQnxJ+SmVGYnFGfFFpTmpxYcYZTg4 lCR4c18D5QSLUtNTK9Iyc4BBDJOW4OBREuHtB0nzFhck5hZnpkOkTjEacxzbdPkPE0fHzbt/m IRY8vLzUqXEecNASgVASjNK8+AGwaLrEqOslDAvIwMDgxBPQWpRbmYJqvwrRnEORiVh3gMgU3 gy80rg9r0COoUJ6JTsDQdATilJREhJNTBqzZyd31L/cmlv97bQ1AOmep3xP3ack/vAIGf3/rj f9niDSZek2/YH3fW7sZxxV9ztPYcN7/4886nSaNn6SQdzrktk5MdeCYmN/Kz571D6LNVp2rHK yd7Xts+8679Y6W1g4ZOAlAcPS5835+8+Xe11083gpvKc3jvmt3U2sa4XcZrS92eNibCKEktxR qKhFnNRcSIAgALChqkCAAA= X-Env-Sender: prvs=4307c781f=euan.harris@citrix.com X-Msg-Ref: server-5.tower-31.messagelabs.com!1506012438!112694314!2 X-Originating-IP: [66.165.176.89] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n, received_headers: No Received headers X-StarScan-Received: X-StarScan-Version: 9.4.45; banners=-,-,- X-VirusChecked: Checked Received: (qmail 64771 invoked from network); 21 Sep 2017 16:47:20 -0000 Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89) by server-5.tower-31.messagelabs.com with RC4-SHA encrypted SMTP; 21 Sep 2017 16:47:20 -0000 X-IronPort-AV: E=Sophos;i="5.42,425,1500940800"; d="scan'208";a="440712466" From: Euan Harris To: Date: Thu, 21 Sep 2017 17:47:08 +0100 Message-ID: <1506012428-59769-4-git-send-email-euan.harris@citrix.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1506012428-59769-1-git-send-email-euan.harris@citrix.com> References: <1506012428-59769-1-git-send-email-euan.harris@citrix.com> MIME-Version: 1.0 Cc: Euan Harris , marmarek@invisiblethingslab.com Subject: [Xen-devel] [PATCH v2 3/3] python: Add binding for non-blocking xs_check_watch() X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP xs_check_watch() checks for watch notifications without blocking. Together with the binding for xs_fileno(), this makes it possible to write event-driven clients in Python. Signed-off-by: Euan Harris Reviewed-by: Wei Liu Acked-by: Marek Marczykowski-Górecki --- tools/python/xen/lowlevel/xs/xs.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tools/python/xen/lowlevel/xs/xs.c b/tools/python/xen/lowlevel/xs/xs.c index 2af5e07..4710002 100644 --- a/tools/python/xen/lowlevel/xs/xs.c +++ b/tools/python/xen/lowlevel/xs/xs.c @@ -474,6 +474,33 @@ static PyObject *xspy_fileno(XsHandle *self) } +#define xspy_check_watch_doc "\n" \ + "Check for watch notifications without blocking.\n" \ + "\n" \ + "Returns: [tuple] (path, token).\n" \ + " None if no watches have fired.\n" \ + "Raises xen.lowlevel.xs.Error on error.\n" \ + "\n" + +static PyObject *xspy_check_watch(XsHandle *self, PyObject *args) +{ + struct xs_handle *xh = xshandle(self); + PyObject *val = NULL; + char **xsval; + + if (!xh) + return NULL; + + xsval = xs_check_watch(xh); + if (!xsval) { + return none(errno == EAGAIN); + } + + val = match_watch_by_token(self, xsval); + free(xsval); + return val; +} + #define xspy_read_watch_doc "\n" \ "Read a watch notification.\n" \ "\n" \ @@ -911,6 +938,7 @@ static PyMethodDef xshandle_methods[] = { XSPY_METH(set_permissions, METH_VARARGS), XSPY_METH(watch, METH_VARARGS), XSPY_METH(read_watch, METH_NOARGS), + XSPY_METH(check_watch, METH_NOARGS), XSPY_METH(unwatch, METH_VARARGS), XSPY_METH(transaction_start, METH_NOARGS), XSPY_METH(transaction_end, METH_VARARGS | METH_KEYWORDS),