e_input: add mutex for edev->touch.blocked variable 62/299762/1
authorJihoon Kim <jihoon48.kim@samsung.com>
Wed, 4 Oct 2023 05:08:56 +0000 (14:08 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Tue, 10 Oct 2023 02:47:06 +0000 (11:47 +0900)
Change-Id: Ie5bd9ce473227cd36dadb7a0e30980c8014cb68d
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/bin/e_input_device.c
src/bin/e_input_evdev.c
src/bin/e_input_private.h

index d6b0aaa..0a8a0ac 100644 (file)
@@ -1322,7 +1322,9 @@ e_input_device_block(E_Input_Device *dev, unsigned int type, void *client)
           {
              EINA_LIST_FOREACH(e_input_seat_evdev_list_get(seat), l2, edev)
                {
+                  g_mutex_lock(&edev->touch.blocked_mutex);
                   edev->touch.blocked = EINA_TRUE;
+                  g_mutex_unlock(&edev->touch.blocked_mutex);
                }
           }
      }
@@ -1353,8 +1355,14 @@ e_input_device_unblock(E_Input_Device *dev, void *client)
              EINA_LIST_FOREACH(e_input_seat_evdev_list_get(seat), l2, edev)
                {
                   g_mutex_lock(&edev->touch.raw_pressed_mutex);
+
                   if (edev->touch.raw_pressed == 0x0)
-                    edev->touch.blocked = EINA_FALSE;
+                    {
+                       g_mutex_lock(&edev->touch.blocked_mutex);
+                       edev->touch.blocked = EINA_FALSE;
+                       g_mutex_unlock(&edev->touch.blocked_mutex);
+                    }
+
                   g_mutex_unlock(&edev->touch.raw_pressed_mutex);
                }
           }
index a11cdab..ded2609 100644 (file)
@@ -2016,6 +2016,7 @@ _device_handle_touch_down(struct libinput_device *device, struct libinput_event_
    edev->touch.raw_pressed |= (1 << edev->mt_slot);
    g_mutex_unlock(&edev->touch.raw_pressed_mutex);
 
+   g_mutex_lock(&edev->touch.blocked_mutex);
    if (edev->touch.blocked)
      {
         g_mutex_lock(&edev->seat->dev->blocked_client_mutex);
@@ -2023,9 +2024,12 @@ _device_handle_touch_down(struct libinput_device *device, struct libinput_event_
               edev->mt_slot, edev->seat->ptr.ix, edev->seat->ptr.iy, edev->seat->dev->blocked_client,
               edev->seat->dev->server_blocked);
         g_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
+        g_mutex_unlock(&edev->touch.blocked_mutex);
         return;
      }
 
+   g_mutex_unlock(&edev->touch.blocked_mutex);
+
    _device_handle_touch_motion_send(edev, event);
    _device_handle_touch_event_send(edev, event, ECORE_EVENT_MOUSE_BUTTON_DOWN);
 }
@@ -2082,10 +2086,13 @@ _device_handle_touch_motion(struct libinput_device *device, struct libinput_even
 
    if (!(edev->touch.pressed & (1 << edev->mt_slot)))
      {
+        g_mutex_lock(&edev->touch.blocked_mutex);
         if (edev->touch.blocked)
           {
+             g_mutex_unlock(&edev->touch.blocked_mutex);
              return;
           }
+        g_mutex_unlock(&edev->touch.blocked_mutex);
      }
 
    _device_handle_touch_motion_send(edev, event);
@@ -2135,6 +2142,7 @@ _device_handle_touch_up(struct libinput_device *device, struct libinput_event_to
    edev->touch.raw_pressed &= ~(1 << edev->mt_slot);
    g_mutex_unlock(&edev->touch.raw_pressed_mutex);
 
+   g_mutex_lock(&edev->touch.blocked_mutex);
    if (edev->touch.blocked)
      {
         if (!(edev->touch.pressed & (1 << edev->mt_slot)))
@@ -2151,10 +2159,12 @@ _device_handle_touch_up(struct libinput_device *device, struct libinput_event_to
                   edev->touch.blocked = EINA_FALSE;
                }
              g_mutex_unlock(&edev->touch.raw_pressed_mutex);
+             g_mutex_unlock(&edev->touch.blocked_mutex);
              return;
           }
      }
 
+   g_mutex_unlock(&edev->touch.blocked_mutex);
    _device_handle_touch_event_send(edev, event, ECORE_EVENT_MOUSE_BUTTON_UP);
 }
 
@@ -2337,6 +2347,7 @@ _e_input_evdev_device_create(E_Input_Seat *seat, struct libinput_device *device)
         _device_touch_count_update(edev);
 
         g_mutex_init(&edev->touch.raw_pressed_mutex);
+        g_mutex_init(&edev->touch.blocked_mutex);
         edev->touch.coords = calloc(1, sizeof(E_Input_Coord)*e_input_touch_max_count_get());
 
         if  (!edev->touch.coords)
@@ -2408,6 +2419,7 @@ _e_input_evdev_device_destroy(E_Input_Evdev *edev)
         edev->touch.coords = NULL;
      }
    g_mutex_clear(&edev->touch.raw_pressed_mutex);
+   g_mutex_clear(&edev->touch.blocked_mutex);
    eina_stringshare_del(edev->output_name);
 
    ecore_thread_main_loop_end();
index eb97669..f6fb890 100644 (file)
@@ -158,6 +158,7 @@ struct _E_Input_Evdev
         unsigned int raw_pressed;
         Eina_Bool blocked;
         GMutex raw_pressed_mutex;
+        GMutex blocked_mutex;
      } touch;
 
    const char *output_name;