From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45258) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XUGGy-0000ik-M3 for qemu-devel@nongnu.org; Wed, 17 Sep 2014 10:32:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XUGGt-0000TB-TC for qemu-devel@nongnu.org; Wed, 17 Sep 2014 10:31:56 -0400 Received: from smtp.citrix.com ([66.165.176.89]:35628) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XUGGt-0000Rt-PI for qemu-devel@nongnu.org; Wed, 17 Sep 2014 10:31:51 -0400 From: Owen smith Date: Wed, 17 Sep 2014 15:30:38 +0100 Message-ID: <1410964242-3341-2-git-send-email-owen.smith@citrix.com> In-Reply-To: <1410964242-3341-1-git-send-email-owen.smith@citrix.com> References: <1410964242-3341-1-git-send-email-owen.smith@citrix.com> MIME-Version: 1.0 Content-Type: text/plain Subject: [Qemu-devel] [PATCH v2 1/5] xenfb: Unregister keyboard event handler correctly List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: stefano.stabellini@eu.citrix.com, Owen smith , xen-devel@lists.xen.org The keyboard event handler was not being removed, a NULL-callback entry was being added to intercept events. Use the unregister call to remove the keyboard event handler when appropriate. Signed-off-by: Owen smith --- hw/display/xenfb.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/hw/display/xenfb.c b/hw/display/xenfb.c index 07ddc9d..9dcf9b6 100644 --- a/hw/display/xenfb.c +++ b/hw/display/xenfb.c @@ -62,6 +62,7 @@ struct XenInput { int abs_pointer_wanted; /* Whether guest supports absolute pointer */ int button_state; /* Last seen pointer button state */ int extended; + QEMUPutKbdEntry *qkbd; QEMUPutMouseEntry *qmouse; }; @@ -364,7 +365,6 @@ static int input_initialise(struct XenDevice *xendev) if (rc != 0) return rc; - qemu_add_kbd_event_handler(xenfb_key_event, in); return 0; } @@ -383,6 +383,11 @@ static void input_connected(struct XenDevice *xendev) in->qmouse = qemu_add_mouse_event_handler(xenfb_mouse_event, in, in->abs_pointer_wanted, "Xen PVFB Mouse"); + + if (in->qkbd) { + qemu_remove_kbd_event_handler(in->qkbd); + } + in->qkbd = qemu_add_kbd_event_handler(xenfb_key_event, in); } static void input_disconnect(struct XenDevice *xendev) @@ -393,7 +398,10 @@ static void input_disconnect(struct XenDevice *xendev) qemu_remove_mouse_event_handler(in->qmouse); in->qmouse = NULL; } - qemu_add_kbd_event_handler(NULL, NULL); + if (in->qkbd) { + qemu_remove_kbd_event_handler(in->qkbd); + in->qkbd = NULL; + } common_unbind(&in->c); } -- 2.1.0