missing_lock: Accessing e_comp_wl->xkb.keymap without holding lock _E_Comp_Wl_Data.xkb.keymap_mutex.
Elsewhere, _E_Comp_Wl_Data.xkb.keymap is written to with _E_Comp_Wl_Data.xkb.keymap_mutex held 3 out of 4 times (1 of these accesses strongly imply that it is necessary).
Change-Id: I9e682d9b3a8862b92e789ddac9eb9eb82177527d
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
Eina_List *l;
uint32_t serial, wl_keycode, cancel_keycode;
E_Comp_Config *comp_conf = NULL;
+ struct xkb_keymap *keymap = NULL;
EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(ec->comp_data, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl->xkb.keymap, EINA_FALSE);
+
+ g_mutex_lock(&e_comp_wl->xkb.keymap_mutex);
+ keymap = e_comp_wl->xkb.keymap;
+ g_mutex_unlock(&e_comp_wl->xkb.keymap_mutex);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(keymap, EINA_FALSE);
struct wl_resource *surface = e_comp_wl_client_surface_get(ec);
EINA_SAFETY_ON_NULL_RETURN_VAL(surface, EINA_FALSE);
{
Ecore_Event_Key *ev_key;
E_Keyrouter_Event_Data *key_data;
+ struct xkb_keymap *keymap = NULL;
- EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl->xkb.keymap, ECORE_CALLBACK_PASS_ON);
+ g_mutex_lock(&e_comp_wl->xkb.keymap_mutex);
+ keymap = e_comp_wl->xkb.keymap;
+ g_mutex_unlock(&e_comp_wl->xkb.keymap_mutex);
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(keymap, ECORE_CALLBACK_PASS_ON);
EINA_SAFETY_ON_NULL_RETURN_VAL(ev, ECORE_CALLBACK_PASS_ON);
if (ev->buttons != 3) return ECORE_CALLBACK_PASS_ON;
KLINF("Server create a new cache file: %s", e_comp_wl_input_keymap_path_get(names));
res = unlink(e_comp_wl_input_keymap_path_get(names));
+ g_mutex_lock(&e_comp_wl->xkb.keymap_mutex);
e_comp_wl_input_keymap_set(NULL, NULL, NULL, NULL, NULL, xkb_context_ref(e_comp_wl->xkb.context), xkb_keymap_ref(e_comp_wl->xkb.keymap));
+ g_mutex_unlock(&e_comp_wl->xkb.keymap_mutex);
}
else
KLINF("Currently cache file is exist. Do not change it.");