From 8738e4aa08dba5d6e866cc24c74ac1257d7c29f1 Mon Sep 17 00:00:00 2001 From: Kitae Kim Date: Tue, 8 Jan 2013 18:58:05 +0900 Subject: [PATCH] virtio-keyboard: Fixed N_SE-19761 issue. While host keyboard is turned on/off repeatedly, emulator is terminated abnormally. So, added mutex destruction and ignore key events routine when host keyboard is turned off. Signed-off-by: Kitae Kim --- tizen/src/hw/maru_virtio_keyboard.c | 2 ++ tizen/src/mloop_event.c | 5 +++++ tizen/src/mloop_event.h | 1 + tizen/src/skin/maruskin_operation.c | 7 +++++++ 4 files changed, 15 insertions(+) diff --git a/tizen/src/hw/maru_virtio_keyboard.c b/tizen/src/hw/maru_virtio_keyboard.c index 088b889186..d767e8b11f 100644 --- a/tizen/src/hw/maru_virtio_keyboard.c +++ b/tizen/src/hw/maru_virtio_keyboard.c @@ -274,5 +274,7 @@ void virtio_keyboard_exit(VirtIODevice *vdev) VirtIOKeyboard *vkbd = (VirtIOKeyboard *)vdev; INFO("destroy device\n"); + qemu_mutex_destroy(&vkbd->event_mutex); + virtio_cleanup(vdev); } diff --git a/tizen/src/mloop_event.c b/tizen/src/mloop_event.c index 36c66e8d9f..685deefe4a 100644 --- a/tizen/src/mloop_event.c +++ b/tizen/src/mloop_event.c @@ -562,6 +562,11 @@ void mloop_evcmd_set_usbdisk(void *dev) usbdisk = (USBDevice *)dev; } +int mloop_evcmd_get_hostkbd_status(void) +{ + return hostkbd ? 1 : 0; +} + void mloop_evcmd_set_hostkbd(void *dev) { hostkbd = (PCIDevice *)dev; diff --git a/tizen/src/mloop_event.h b/tizen/src/mloop_event.h index cd6c6f594a..ddfbc25ec3 100644 --- a/tizen/src/mloop_event.h +++ b/tizen/src/mloop_event.h @@ -42,6 +42,7 @@ void mloop_evcmd_usbdisk(char *img); void mloop_evcmd_hostkbd(int on); int mloop_evcmd_get_usbkbd_status(void); +int mloop_evcmd_get_hostkbd_status(void); void mloop_evcmd_set_usbkbd(void *dev); void mloop_evcmd_set_usbdisk(void *dev); diff --git a/tizen/src/skin/maruskin_operation.c b/tizen/src/skin/maruskin_operation.c index 269c6e884a..ffc7e3a005 100644 --- a/tizen/src/skin/maruskin_operation.c +++ b/tizen/src/skin/maruskin_operation.c @@ -225,6 +225,13 @@ void do_key_event(int event_type, int keycode, int state_mask, int key_location) } #endif +#if defined(TARGET_I386) + if (!mloop_evcmd_get_hostkbd_status()) { + TRACE("ignore keyboard input because usb keyboard is dettached.\n"); + return; + } +#endif + #if defined(TARGET_ARM) if (!mloop_evcmd_get_usbkbd_status()) { TRACE("ignore keyboard input because usb keyboard is dettached.\n"); -- 2.34.1