virtio-keyboard: Fixed N_SE-19761 issue.
authorKitae Kim <kt920.kim@samsung.com>
Tue, 8 Jan 2013 09:58:05 +0000 (18:58 +0900)
committerKitae Kim <kt920.kim@samsung.com>
Tue, 8 Jan 2013 12:39:11 +0000 (21:39 +0900)
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 <kt920.kim@samsung.com>
tizen/src/hw/maru_virtio_keyboard.c
tizen/src/mloop_event.c
tizen/src/mloop_event.h
tizen/src/skin/maruskin_operation.c

index 088b88918610d73aa5cc36fd44689eefbeb37d5e..d767e8b11f46dd317baa102758a60a0ffd739acb 100644 (file)
@@ -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);
 }
index 36c66e8d9f2d9e2140094f3636548dd0ea3c55d6..685deefe4ab698de526cdb3dcce746f86a0e0df2 100644 (file)
@@ -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;
index cd6c6f594a8f42dfcf0482faae69845b161f2aa9..ddfbc25ec3c8c699f9d4a25d829098a55ad864ea 100644 (file)
@@ -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);
index 269c6e884add99285621c05b744275e067077bab..ffc7e3a0050bec6dd1d7b94ed547aadd40ca44e6 100644 (file)
@@ -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");