It is possible to lock a GRecMutex multiple times in the same thread without deadlock
Change-Id: I960b0c2a465255b6ba142a62aa781445f414dc45
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
if (ec->layer == E_LAYER_CLIENT_CURSOR) return NULL;
if (e_comp_canvas_client_layer_map(ec->layer) == 9999) return NULL;
- g_mutex_lock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_lock(&e_comp->input_key_grabs_mutex);
/* go up the layers until we find one */
for (x = e_comp_canvas_layer_map(ec->layer) + 1; x <= e_comp_canvas_layer_map(E_LAYER_CLIENT_CURSOR); x++)
{
}
if (!e_object_is_del(E_OBJECT(ec2)))
{
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
return ec2;
}
}
}
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
return NULL;
}
x = e_comp_canvas_layer_map(ec_layer);
if (x > 0) x--;
- g_mutex_lock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_lock(&e_comp->input_key_grabs_mutex);
for (; x >= e_comp_canvas_layer_map(E_LAYER_CLIENT_DESKTOP); x--)
{
if (!e_comp->layers[x].clients) continue;
}
if (!e_object_is_del(E_OBJECT(ec2)))
{
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
return ec2;
}
}
}
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
return NULL;
}
e_client_bottom_get(void)
{
unsigned int x;
- g_mutex_lock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_lock(&e_comp->input_key_grabs_mutex);
for (x = e_comp_canvas_layer_map(E_LAYER_CLIENT_DESKTOP); x <= e_comp_canvas_layer_map(E_LAYER_CLIENT_CURSOR); x++)
{
E_Client *ec2;
EINA_INLIST_FOREACH(e_comp->layers[x].clients, ec2)
if (!e_object_is_del(E_OBJECT(ec2)))
{
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
return ec2;
}
}
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
return NULL;
}
e_client_top_get(void)
{
unsigned int x;
- g_mutex_lock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_lock(&e_comp->input_key_grabs_mutex);
for (x = e_comp_canvas_layer_map(E_LAYER_CLIENT_CURSOR); x >= e_comp_canvas_layer_map(E_LAYER_CLIENT_DESKTOP); x--)
{
E_Client *ec2;
EINA_INLIST_REVERSE_FOREACH(e_comp->layers[x].clients, ec2)
if (!e_object_is_del(E_OBJECT(ec2)))
{
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
return ec2;
}
}
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
return NULL;
}
if (!desk) continue;
if (desk->visible && (!ec->iconic))
{
- g_mutex_lock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_lock(&e_comp->input_key_grabs_mutex);
if (e_comp->input_key_grabs || e_comp->input_mouse_grabs)
{
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
break;
}
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
ELOGF("FOCUS", "focus set | refocus", ec);
e_client_frame_focus_set(ec, EINA_TRUE);
break;
E_LIST_HANDLER_APPEND(handlers, ECORE_EVENT_SIGNAL_USER, _e_comp_signal_user, NULL);
E_LIST_HANDLER_APPEND(handlers, E_EVENT_COMP_OBJECT_ADD, _e_comp_object_add, NULL);
- g_mutex_init(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_init(&e_comp->input_key_grabs_mutex);
return EINA_TRUE;
}
E_FREE_FUNC(ignores, eina_hash_free);
- g_mutex_clear(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_clear(&e_comp->input_key_grabs_mutex);
return 1;
}
if (kbd || e_comp->input_mouse_grabs)
kwin = e_comp->ee_win;
//e_comp_override_add(); //nocomp condition
- g_mutex_lock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_lock(&e_comp->input_key_grabs_mutex);
if ((e_comp->input_mouse_grabs && e_comp->input_key_grabs) ||
e_grabinput_get(mwin, 0, kwin))
{
e_comp->input_mouse_grabs += mouse;
e_comp->input_key_grabs += kbd;
}
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
return ret;
}
if (e_comp->input_mouse_grabs)
e_comp->input_mouse_grabs -= mouse;
- g_mutex_lock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_lock(&e_comp->input_key_grabs_mutex);
if (e_comp->input_key_grabs)
e_comp->input_key_grabs -= kbd;
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
if (mouse && (!e_comp->input_mouse_grabs))
mwin = e_comp->ee_win;
- g_mutex_lock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_lock(&e_comp->input_key_grabs_mutex);
if (kbd && (!e_comp->input_key_grabs))
kwin = e_comp->ee_win;
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
//e_comp_override_timed_pop(); //nocomp condition
if ((!mwin) && (!kwin)) return;
double interval; // time value the interval of commit_handler after tdm_commit in second (default : 0)
} commit_handler_timer;
- GMutex input_key_grabs_mutex;
+ GRecMutex input_key_grabs_mutex;
};
struct _E_Comp_Connected_Client_Info
/* try to get the internal data for the layer;
* will return NULL for fake layers (eg. wayland)
*/
- g_mutex_lock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_lock(&e_comp->input_key_grabs_mutex);
if (e_comp->layers[cw->layer].obj)
{
if (evas_object_smart_smart_get(e_comp->layers[cw->layer].obj))
e_comp->layers[cw->layer].clients = eina_inlist_append(e_comp->layers[cw->layer].clients, EINA_INLIST_GET(cw->ec));
}
e_comp->layers[cw->layer].clients_count++;
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
#ifndef E_RELEASE_BUILD
if (layer_cw)
{
E_Client *below_ec = e_client_below_get(cw->ec);
if (below_ec)
{
- g_mutex_lock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_lock(&e_comp->input_key_grabs_mutex);
if (e_comp->layers[cw->layer].obj == below_ec->frame)
CRI("ACK! ec:%p", cw->ec);
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
}
}
#endif
static void
_e_comp_object_layers_remove(E_Comp_Object *cw)
{
- g_mutex_lock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_lock(&e_comp->input_key_grabs_mutex);
if (cw->ec && e_comp->layers[cw->layer].clients)
{
e_comp->layers[cw->layer].clients = eina_inlist_remove(e_comp->layers[cw->layer].clients, EINA_INLIST_GET(cw->ec));
e_comp->layers[cw->layer].clients_count--;
}
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
/*
e_comp->layers[cw->layer].objs = eina_inlist_remove(e_comp->layers[cw->layer].objs, EINA_INLIST_GET(cw));
e_comp->layers[cw->layer].objs_count--;
case ECORE_DEVICE_CLASS_MOUSE:
return e_devicemgr->last_device_ptr;
case ECORE_DEVICE_CLASS_KEYBOARD:
- g_mutex_lock(&e_devicemgr->last_device_kbd_mutex);
+ g_rec_mutex_lock(&e_devicemgr->last_device_kbd_mutex);
last_kbd = e_devicemgr->last_device_kbd;
- g_mutex_unlock(&e_devicemgr->last_device_kbd_mutex);
+ g_rec_mutex_unlock(&e_devicemgr->last_device_kbd_mutex);
return last_kbd;
case ECORE_DEVICE_CLASS_TOUCH:
return e_devicemgr->last_device_touch;
e_devicemgr->last_device_ptr = device;
break;
case ECORE_DEVICE_CLASS_KEYBOARD:
- g_mutex_lock(&e_devicemgr->last_device_kbd_mutex);
+ g_rec_mutex_lock(&e_devicemgr->last_device_kbd_mutex);
e_devicemgr->last_device_kbd = device;
- g_mutex_unlock(&e_devicemgr->last_device_kbd_mutex);
+ g_rec_mutex_unlock(&e_devicemgr->last_device_kbd_mutex);
break;
case ECORE_DEVICE_CLASS_TOUCH:
e_devicemgr->last_device_touch = device;
case ECORE_DEVICE_CLASS_MOUSE:
return ec->comp_data->last_device_ptr;
case ECORE_DEVICE_CLASS_KEYBOARD:
- g_mutex_lock(&ec->comp_data->last_device_kbd_mutex);
+ g_rec_mutex_lock(&ec->comp_data->last_device_kbd_mutex);
last_kbd = ec->comp_data->last_device_kbd;
- g_mutex_unlock(&ec->comp_data->last_device_kbd_mutex);
+ g_rec_mutex_unlock(&ec->comp_data->last_device_kbd_mutex);
return last_kbd;
case ECORE_DEVICE_CLASS_TOUCH:
return ec->comp_data->last_device_touch;
ec->comp_data->last_device_ptr = device;
break;
case ECORE_DEVICE_CLASS_KEYBOARD:
- g_mutex_lock(&ec->comp_data->last_device_kbd_mutex);
+ g_rec_mutex_lock(&ec->comp_data->last_device_kbd_mutex);
ec->comp_data->last_device_kbd = device;
- g_mutex_unlock(&ec->comp_data->last_device_kbd_mutex);
+ g_rec_mutex_unlock(&ec->comp_data->last_device_kbd_mutex);
break;
case ECORE_DEVICE_CLASS_TOUCH:
ec->comp_data->last_device_touch = device;
serial = wl_display_next_serial(e_comp_wl->wl.disp);
wc = wl_resource_get_client(surface);
- g_mutex_lock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_lock(&e_devicemgr->device_list_mutex);
EINA_LIST_FOREACH(e_devicemgr->device_list, l, input_dev)
{
if (!eina_streq(input_dev->identifier, dev_name) || (input_dev->clas != dev_class)) continue;
}
}
}
- g_mutex_unlock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_unlock(&e_devicemgr->device_list_mutex);
}
static void
dev_name = ecore_device_identifier_get(dev);
- g_mutex_lock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_lock(&e_devicemgr->device_list_mutex);
EINA_LIST_FOREACH(e_devicemgr->device_list, l, input_dev)
{
if (!eina_streq(input_dev->identifier, dev_name) ||
tizen_input_device_send_event_device(dev_res, serial, input_dev->identifier, timestamp);
}
}
- g_mutex_unlock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_unlock(&e_devicemgr->device_list_mutex);
}
static void
dev_name = e_device_identifier_get(dev);
- g_mutex_lock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_lock(&e_devicemgr->device_list_mutex);
EINA_LIST_FOREACH(e_devicemgr->device_list, l, input_dev)
{
if (!eina_streq(input_dev->identifier, dev_name) ||
tizen_input_device_send_event_device(dev_res, serial, input_dev->identifier, timestamp);
}
}
- g_mutex_unlock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_unlock(&e_devicemgr->device_list_mutex);
}
static void
f_value = wl_fixed_from_double(value);
wc = wl_resource_get_client(surface);
- g_mutex_lock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_lock(&e_devicemgr->device_list_mutex);
EINA_LIST_FOREACH(e_devicemgr->device_list, l, input_dev)
{
if ((strcmp(input_dev->identifier, dev_name)) || (input_dev->clas != (Ecore_Device_Class)dev_class)) continue;
tizen_input_device_send_axis(dev_res, axis_type, f_value);
}
}
- g_mutex_unlock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_unlock(&e_devicemgr->device_list_mutex);
}
static void
}
g_mutex_unlock(&e_comp_wl->kbd.keys_mutex);
- g_mutex_lock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_lock(&e_comp->input_key_grabs_mutex);
if ((!e_client_action_get()) && (!e_comp->input_key_grabs))
{
DBG("wl_array_add: Out of memory\n");
g_mutex_unlock(&e_comp_wl->kbd.keys_mutex);
g_mutex_unlock(&e_comp_wl->kbd.focused_mutex);
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
return EINA_FALSE;
}
g_mutex_unlock(&e_comp_wl->kbd.keys_mutex);
}
}
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
/* update modifier state */
e_comp_wl_input_keyboard_state_update(keycode, EINA_TRUE);
g_mutex_unlock(&e_comp_wl->kbd.keys_mutex);
/* If a key down event have been sent to clients, send a key up event to client for garantee key event sequence pair. (down/up) */
- g_mutex_lock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_lock(&e_comp->input_key_grabs_mutex);
if ((delivered_key) ||
((!e_client_action_get()) && (!e_comp->input_key_grabs)))
{
}
g_mutex_unlock(&e_comp_wl->kbd.focused_mutex);
}
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
/* update modifier state */
e_comp_wl_input_keyboard_state_update(keycode, EINA_FALSE);
Eina_Bool wtz_surface_assigned;
struct wl_list pointer_constraints;
- GMutex last_device_kbd_mutex;
+ GRecMutex last_device_kbd_mutex;
GMutex surface_mutex;
struct wl_signal state_commit_signal;
e_pixmap_cdata_set(ec->pixmap, &surface->base);
- g_mutex_init(&ec->comp_data->last_device_kbd_mutex);
+ g_rec_mutex_init(&ec->comp_data->last_device_kbd_mutex);
g_mutex_init(&ec->comp_data->surface_mutex);
end:
TRACE_DS_BEGIN(COMP_WL:CLIENT DEL CB);
- g_mutex_clear(&ec->comp_data->last_device_kbd_mutex);
+ g_rec_mutex_clear(&ec->comp_data->last_device_kbd_mutex);
e_comp_wl_hook_call(E_COMP_WL_HOOK_DEL, ec);
e_devicemgr_conf_init(dconfig);
e_devicemgr->dconfig = dconfig;
- g_mutex_init(&e_devicemgr->device_list_mutex);
- g_mutex_init(&e_devicemgr->last_device_kbd_mutex);
+ g_rec_mutex_init(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_init(&e_devicemgr->last_device_kbd_mutex);
res = e_devicemgr_wl_init();
EINA_SAFETY_ON_FALSE_GOTO(res, wl_failed);
EINTERN int
e_devicemgr_shutdown(void)
{
- g_mutex_clear(&e_devicemgr->device_list_mutex);
- g_mutex_clear(&e_devicemgr->last_device_kbd_mutex);
+ g_rec_mutex_clear(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_clear(&e_devicemgr->last_device_kbd_mutex);
eina_log_domain_unregister(_devicemgr_log_dom);
_devicemgr_log_dom = -1;
Eina_List *watched_clients;
int max_touch_count;
- GMutex device_list_mutex;
- GMutex last_device_kbd_mutex;
+ GRecMutex device_list_mutex;
+ GRecMutex last_device_kbd_mutex;
struct
{
EINA_SAFETY_ON_NULL_RETURN(identifier);
EINA_SAFETY_ON_NULL_RETURN(e_devicemgr);
- g_mutex_lock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_lock(&e_devicemgr->device_list_mutex);
EINA_LIST_FOREACH(e_devicemgr->device_list, l, dev)
{
if (!dev->name) continue;
(!strcmp(dev->name, name)) &&
(!strcmp(dev->identifier, identifier)))
{
- g_mutex_unlock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_unlock(&e_devicemgr->device_list_mutex);
return;
}
}
- g_mutex_unlock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_unlock(&e_devicemgr->device_list_mutex);
if (!(dev = E_NEW(E_Devicemgr_Input_Device, 1))) return;
dev->name = eina_stringshare_add(name);
dev->clas = clas;
dev->subclas = subclas;
- g_mutex_lock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_lock(&e_devicemgr->device_list_mutex);
e_devicemgr->device_list = eina_list_append(e_devicemgr->device_list, dev);
- g_mutex_unlock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_unlock(&e_devicemgr->device_list_mutex);
if (dev->clas == ECORE_DEVICE_CLASS_MOUSE)
e_devicemgr->last_device_ptr = dev;
}
}
- g_mutex_lock(&e_devicemgr->last_device_kbd_mutex);
+ g_rec_mutex_lock(&e_devicemgr->last_device_kbd_mutex);
if (!e_devicemgr->last_device_kbd && dev->clas == ECORE_DEVICE_CLASS_KEYBOARD)
e_devicemgr->last_device_kbd = dev;
- g_mutex_unlock(&e_devicemgr->last_device_kbd_mutex);
+ g_rec_mutex_unlock(&e_devicemgr->last_device_kbd_mutex);
e_devicemgr_inputgen_device_ready_send(dev);
e_devicemgr_wl_device_add(dev);
EINA_SAFETY_ON_NULL_RETURN(name);
EINA_SAFETY_ON_NULL_RETURN(identifier);
- g_mutex_lock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_lock(&e_devicemgr->device_list_mutex);
EINA_LIST_FOREACH(e_devicemgr->device_list, l, dev)
{
if (!dev->name) continue;
(!strcmp(dev->identifier, identifier)))
break;
}
- g_mutex_unlock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_unlock(&e_devicemgr->device_list_mutex);
if (!dev)
{
return;
if (dev->identifier) eina_stringshare_del(dev->identifier);
if (dev->seat_name) eina_stringshare_del(dev->seat_name);
- g_mutex_lock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_lock(&e_devicemgr->device_list_mutex);
e_devicemgr->device_list = eina_list_remove(e_devicemgr->device_list, dev);
- g_mutex_unlock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_unlock(&e_devicemgr->device_list_mutex);
if (e_devicemgr->last_device_ptr == dev)
e_devicemgr->last_device_ptr = NULL;
if (e_devicemgr->last_device_kbd == dev)
{
- g_mutex_lock(&e_devicemgr->last_device_kbd_mutex);
+ g_rec_mutex_lock(&e_devicemgr->last_device_kbd_mutex);
e_devicemgr->last_device_kbd = NULL;
- g_mutex_unlock(&e_devicemgr->last_device_kbd_mutex);
+ g_rec_mutex_unlock(&e_devicemgr->last_device_kbd_mutex);
}
E_FREE(dev);
dev_identifier = (char *)ecore_device_identifier_get(dev);
EINA_SAFETY_ON_NULL_RETURN(dev_identifier);
- g_mutex_lock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_lock(&e_devicemgr->device_list_mutex);
EINA_LIST_FOREACH(e_devicemgr->device_list, l, data)
{
if (data->clas == ecore_device_class_get(dev) && data->identifier)
data->subclas = ecore_device_subclass_get(dev);
e_devicemgr_wl_device_update(data);
- g_mutex_unlock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_unlock(&e_devicemgr->device_list_mutex);
return;
}
}
}
- g_mutex_unlock(&e_devicemgr->device_list_mutex);
+ g_rec_mutex_unlock(&e_devicemgr->device_list_mutex);
}
static Eina_Bool
E_Zone *zone;
E_Client *focused_ec;
- GMutex focused_ec_mutex;
+ GRecMutex focused_ec_mutex;
Eina_List *focus_stack;
Eina_List *defer_focus_stack;
_focus_policy_history_focus_stack_latest_set(history_policy, ec);
// assign the focused_ec
- g_mutex_lock(&history_policy->focused_ec_mutex);
+ g_rec_mutex_lock(&history_policy->focused_ec_mutex);
history_policy->focused_ec = ec;
- g_mutex_unlock(&history_policy->focused_ec_mutex);
+ g_rec_mutex_unlock(&history_policy->focused_ec_mutex);
ELOGF("FOCUS_HISTORY", "focus_set | focused_ec SET", ec);
}
_e_focus_policy_history_focus_defer_unset(history_policy, ec);
// assign the focused_ec
- g_mutex_lock(&history_policy->focused_ec_mutex);
+ g_rec_mutex_lock(&history_policy->focused_ec_mutex);
history_policy->focused_ec = NULL;
- g_mutex_unlock(&history_policy->focused_ec_mutex);
+ g_rec_mutex_unlock(&history_policy->focused_ec_mutex);
ELOGF("FOCUS_HISTORY", "focus_set | focused_ec UNSET", ec);
}
{
ELOGF("FOCUS_HISTORY", "CRITICAL. focused is deleted ec.", ec);
ELOGF("FOCUS_HISTORY", "CLIENT FOCUS_SET", NULL);
- g_mutex_lock(&history_policy->focused_ec_mutex);
+ g_rec_mutex_lock(&history_policy->focused_ec_mutex);
history_policy->focused_ec = NULL;
- g_mutex_unlock(&history_policy->focused_ec_mutex);
+ g_rec_mutex_unlock(&history_policy->focused_ec_mutex);
}
}
}
EINA_SAFETY_ON_NULL_RETURN(zone);
// make focused_ec be NULL
- g_mutex_lock(&history_policy->focused_ec_mutex);
+ g_rec_mutex_lock(&history_policy->focused_ec_mutex);
history_policy->focused_ec = NULL;
- g_mutex_unlock(&history_policy->focused_ec_mutex);
+ g_rec_mutex_unlock(&history_policy->focused_ec_mutex);
ELOGF("FOCUS_HISTORY", "focus_clear | focused_ec UNSET", NULL);
}
if (!desk) continue;
if (desk->visible && (!ec->iconic))
{
- g_mutex_lock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_lock(&e_comp->input_key_grabs_mutex);
if (e_comp->input_key_grabs || e_comp->input_mouse_grabs)
{
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
break;
}
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
ELOGF("FOCUS_HISTORY", "focus set | refocus", ec);
e_client_frame_focus_set(ec, EINA_TRUE);
wl_list_remove(&history_policy->zone_client_remove.link);
wl_list_remove(&history_policy->zone_client_add.link);
- g_mutex_clear(&history_policy->focused_ec_mutex);
+ g_rec_mutex_clear(&history_policy->focused_ec_mutex);
E_FREE(history_policy);
}
//E_FOCUS_HISTORY_TRACE(history_policy, NULL);
- g_mutex_lock(&history_policy->focused_ec_mutex);
+ g_rec_mutex_lock(&history_policy->focused_ec_mutex);
focused_ec = history_policy->focused_ec;
- g_mutex_unlock(&history_policy->focused_ec_mutex);
+ g_rec_mutex_unlock(&history_policy->focused_ec_mutex);
return focused_ec;
}
EINA_SAFETY_ON_NULL_GOTO(history_policy, fail);
history_policy->zone = zone;
- g_mutex_init(&history_policy->focused_ec_mutex);
+ g_rec_mutex_init(&history_policy->focused_ec_mutex);
E_FOCUS_HISTORY_TRACE(history_policy, NULL);
E_Zone *zone;
E_Client *focused_ec;
- GMutex focused_ec_mutex;
+ GRecMutex focused_ec_mutex;
struct wl_listener zone_client_add;
struct wl_listener zone_client_remove;
}
// assign the focused_ec
- g_mutex_lock(&topmost_policy->focused_ec_mutex);
+ g_rec_mutex_lock(&topmost_policy->focused_ec_mutex);
topmost_policy->focused_ec = ec;
- g_mutex_unlock(&topmost_policy->focused_ec_mutex);
+ g_rec_mutex_unlock(&topmost_policy->focused_ec_mutex);
ELOGF("FOCUS_TOPMOST", "focus_set | focused_ec SET", ec);
}
}
// assign the focused_ec
- g_mutex_lock(&topmost_policy->focused_ec_mutex);
+ g_rec_mutex_lock(&topmost_policy->focused_ec_mutex);
topmost_policy->focused_ec = NULL;
- g_mutex_unlock(&topmost_policy->focused_ec_mutex);
+ g_rec_mutex_unlock(&topmost_policy->focused_ec_mutex);
ELOGF("FOCUS_TOPMOST", "focus_unset | focused_ec UNSET", NULL);
}
{
ELOGF("FOCUS_TOPMOST", "CRITICAL. focused is deleted ec.", ec);
ELOGF("FOCUS_TOPMOST", "CLIENT FOCUS_SET", NULL);
- g_mutex_lock(&topmost_policy->focused_ec_mutex);
+ g_rec_mutex_lock(&topmost_policy->focused_ec_mutex);
topmost_policy->focused_ec = NULL;
- g_mutex_unlock(&topmost_policy->focused_ec_mutex);
+ g_rec_mutex_unlock(&topmost_policy->focused_ec_mutex);
}
}
}
if (topmost_policy->zone != zone) return;
// make focused_ec be NULL
- g_mutex_lock(&topmost_policy->focused_ec_mutex);
+ g_rec_mutex_lock(&topmost_policy->focused_ec_mutex);
topmost_policy->focused_ec = NULL;
- g_mutex_unlock(&topmost_policy->focused_ec_mutex);
+ g_rec_mutex_unlock(&topmost_policy->focused_ec_mutex);
ELOGF("FOCUS_TOPMOST", "focus_clear | focused_ec UNSET", NULL);
}
wl_list_remove(&topmost_policy->zone_client_remove.link);
wl_list_remove(&topmost_policy->zone_client_add.link);
- g_mutex_clear(&topmost_policy->focused_ec_mutex);
+ g_rec_mutex_clear(&topmost_policy->focused_ec_mutex);
E_FREE(topmost_policy);
}
EINA_SAFETY_ON_NULL_GOTO(topmost_policy, fail);
topmost_policy->zone = zone;
- g_mutex_init(&topmost_policy->focused_ec_mutex);
+ g_rec_mutex_init(&topmost_policy->focused_ec_mutex);
policy_iface->impl = (E_Focus_Policy_Impl *)topmost_policy;
policy_iface->del = _focus_policy_topmost_del;
unsigned int blocked;
void *blocked_client;
unsigned int server_blocked;
- GMutex blocked_client_mutex;
+ GRecMutex blocked_client_mutex;
};
EINTERN int e_input_init(Ecore_Evas *ee);
dev->seat = eina_stringshare_add("seat0");
dev->fd_hash = eina_hash_string_superfast_new(NULL);
- g_mutex_init(&dev->blocked_client_mutex);
+ g_rec_mutex_init(&dev->blocked_client_mutex);
/* try to create xkb context */
if (!(dev->xkb_ctx = _e_input_device_cached_context_get(0)))
/* check for valid device */
EINA_SAFETY_ON_NULL_RETURN_VAL(dev, EINA_FALSE);
- g_mutex_clear(&dev->blocked_client_mutex);
+ g_rec_mutex_clear(&dev->blocked_client_mutex);
_e_input_device_remove_list(dev);
e_input_device_destroy(dev);
}
dev->blocked |= type;
- g_mutex_lock(&dev->blocked_client_mutex);
+ g_rec_mutex_lock(&dev->blocked_client_mutex);
dev->blocked_client = client;
- g_mutex_unlock(&dev->blocked_client_mutex);
+ g_rec_mutex_unlock(&dev->blocked_client_mutex);
}
else if (client == E_INPUT_REQUEST_SERVER)
{
{
EINA_LIST_FOREACH(e_input_seat_evdev_list_get(seat), l2, edev)
{
- g_mutex_lock(&edev->touch.blocked_mutex);
+ g_rec_mutex_lock(&edev->touch.blocked_mutex);
edev->touch.blocked = EINA_TRUE;
- g_mutex_unlock(&edev->touch.blocked_mutex);
+ g_rec_mutex_unlock(&edev->touch.blocked_mutex);
}
}
}
{
EINA_LIST_FOREACH(e_input_seat_evdev_list_get(seat), l2, edev)
{
- g_mutex_lock(&edev->touch.raw_pressed_mutex);
+ g_rec_mutex_lock(&edev->touch.raw_pressed_mutex);
if (edev->touch.raw_pressed == 0x0)
{
- g_mutex_lock(&edev->touch.blocked_mutex);
+ g_rec_mutex_lock(&edev->touch.blocked_mutex);
edev->touch.blocked = EINA_FALSE;
- g_mutex_unlock(&edev->touch.blocked_mutex);
+ g_rec_mutex_unlock(&edev->touch.blocked_mutex);
}
- g_mutex_unlock(&edev->touch.raw_pressed_mutex);
+ g_rec_mutex_unlock(&edev->touch.raw_pressed_mutex);
}
}
}
else
{
dev->blocked = 0x0;
- g_mutex_lock(&dev->blocked_client_mutex);
+ g_rec_mutex_lock(&dev->blocked_client_mutex);
dev->blocked_client = NULL;
- g_mutex_unlock(&dev->blocked_client_mutex);
+ g_rec_mutex_unlock(&dev->blocked_client_mutex);
}
return EINA_TRUE;
if ((edev->seat->dev->blocked & E_INPUT_SEAT_KEYBOARD) ||
(edev->seat->dev->server_blocked & E_INPUT_SEAT_KEYBOARD))
{
- g_mutex_lock(&edev->seat->dev->blocked_client_mutex);
+ g_rec_mutex_lock(&edev->seat->dev->blocked_client_mutex);
ELOGF("Key", "Press (keycode: %d, device: %s) is blocked by %p, server: 0x%x", NULL,
code, device_name, edev->seat->dev->blocked_client,
edev->seat->dev->server_blocked);
- g_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
+ g_rec_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
return;
}
}
if (!dup_found)
{
- g_mutex_lock(&edev->seat->dev->blocked_client_mutex);
+ g_rec_mutex_lock(&edev->seat->dev->blocked_client_mutex);
ELOGF("Key", "Release (keycode: %d, device: %s) is blocked by %p", NULL,
code, device_name, edev->seat->dev->blocked_client);
- g_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
+ g_rec_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
return;
}
}
if ((edev->seat->dev->blocked & E_INPUT_SEAT_POINTER) ||
(edev->seat->dev->server_blocked & E_INPUT_SEAT_POINTER))
{
- g_mutex_lock(&edev->seat->dev->blocked_client_mutex);
+ g_rec_mutex_lock(&edev->seat->dev->blocked_client_mutex);
ELOGF("Mouse", "Button Press (btn: %d, device: %s) is blocked by %p, server: 0x%x", NULL,
button, ecore_device_name_get(ecore_dev), edev->seat->dev->blocked_client,
edev->seat->dev->server_blocked);
- g_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
+ g_rec_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
goto end;
}
else
{
if (!(edev->mouse.pressed_button & (1 << button)))
{
- g_mutex_lock(&edev->seat->dev->blocked_client_mutex);
+ g_rec_mutex_lock(&edev->seat->dev->blocked_client_mutex);
ELOGF("Mouse", "Button Release (btn: %d, device: %s) is blocked by %p, server: 0x%x", NULL,
button, ecore_device_name_get(ecore_dev), edev->seat->dev->blocked_client,
edev->seat->dev->server_blocked);
- g_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
+ g_rec_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
goto end;
}
edev->mouse.pressed_button &= ~(1 << button);
if ((edev->seat->dev->blocked & E_INPUT_SEAT_POINTER) ||
(edev->seat->dev->server_blocked & E_INPUT_SEAT_POINTER))
{
- g_mutex_lock(&edev->seat->dev->blocked_client_mutex);
+ g_rec_mutex_lock(&edev->seat->dev->blocked_client_mutex);
if (detent_data)
ELOGF("Mouse", "Detent (direction: %d, value: %d) is blocked by %p, server: 0x%x", NULL,
direction, z, edev->seat->dev->blocked_client, edev->seat->dev->server_blocked);
ELOGF("Mouse", "Wheel (direction: %d, value: %d) is blocked by %p, server: 0x%x", NULL,
direction, z, edev->seat->dev->blocked_client, edev->seat->dev->server_blocked);
- g_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
+ g_rec_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
goto end;
}
if (comp_conf && comp_conf->input_log_enable)
ELOGF("Touch", "Down (id: %d, x: %d, y: %d)", NULL, edev->mt_slot, edev->seat->ptr.ix, edev->seat->ptr.iy);
- g_mutex_lock(&edev->touch.raw_pressed_mutex);
+ g_rec_mutex_lock(&edev->touch.raw_pressed_mutex);
edev->touch.raw_pressed |= (1 << edev->mt_slot);
- g_mutex_unlock(&edev->touch.raw_pressed_mutex);
+ g_rec_mutex_unlock(&edev->touch.raw_pressed_mutex);
- g_mutex_lock(&edev->touch.blocked_mutex);
+ g_rec_mutex_lock(&edev->touch.blocked_mutex);
if (edev->touch.blocked)
{
- g_mutex_lock(&edev->seat->dev->blocked_client_mutex);
+ g_rec_mutex_lock(&edev->seat->dev->blocked_client_mutex);
ELOGF("Touch", "Down (id: %d, x: %d, y: %d) is blocked by %p, server: 0x%x", NULL,
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);
+ g_rec_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
+ g_rec_mutex_unlock(&edev->touch.blocked_mutex);
return;
}
- g_mutex_unlock(&edev->touch.blocked_mutex);
+ g_rec_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);
if (!(edev->touch.pressed & (1 << edev->mt_slot)))
{
- g_mutex_lock(&edev->touch.blocked_mutex);
+ g_rec_mutex_lock(&edev->touch.blocked_mutex);
if (edev->touch.blocked)
{
- g_mutex_unlock(&edev->touch.blocked_mutex);
+ g_rec_mutex_unlock(&edev->touch.blocked_mutex);
return;
}
- g_mutex_unlock(&edev->touch.blocked_mutex);
+ g_rec_mutex_unlock(&edev->touch.blocked_mutex);
}
_device_handle_touch_motion_send(edev, event);
if (comp_conf && comp_conf->input_log_enable)
ELOGF("Touch", "Up (id: %d, x: %d, y: %d)", NULL, edev->mt_slot, edev->seat->ptr.ix, edev->seat->ptr.iy);
- g_mutex_lock(&edev->touch.raw_pressed_mutex);
+ g_rec_mutex_lock(&edev->touch.raw_pressed_mutex);
edev->touch.raw_pressed &= ~(1 << edev->mt_slot);
- g_mutex_unlock(&edev->touch.raw_pressed_mutex);
+ g_rec_mutex_unlock(&edev->touch.raw_pressed_mutex);
- g_mutex_lock(&edev->touch.blocked_mutex);
+ g_rec_mutex_lock(&edev->touch.blocked_mutex);
if (edev->touch.blocked)
{
if (!(edev->touch.pressed & (1 << edev->mt_slot)))
{
- g_mutex_lock(&edev->seat->dev->blocked_client_mutex);
+ g_rec_mutex_lock(&edev->seat->dev->blocked_client_mutex);
ELOGF("Touch", "Up (id: %d, x: %d, y: %d) is blocked by %p, server(0x%x)", NULL,
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_rec_mutex_unlock(&edev->seat->dev->blocked_client_mutex);
- g_mutex_lock(&edev->touch.raw_pressed_mutex);
+ g_rec_mutex_lock(&edev->touch.raw_pressed_mutex);
if (edev->touch.raw_pressed == 0x0)
{
edev->touch.blocked = EINA_FALSE;
}
- g_mutex_unlock(&edev->touch.raw_pressed_mutex);
- g_mutex_unlock(&edev->touch.blocked_mutex);
+ g_rec_mutex_unlock(&edev->touch.raw_pressed_mutex);
+ g_rec_mutex_unlock(&edev->touch.blocked_mutex);
return;
}
}
- g_mutex_unlock(&edev->touch.blocked_mutex);
+ g_rec_mutex_unlock(&edev->touch.blocked_mutex);
_device_handle_touch_event_send(edev, event, ECORE_EVENT_MOUSE_BUTTON_UP);
}
edev->device = device;
edev->path = eina_stringshare_printf("%s/%s", e_input_base_dir_get(), libinput_device_get_sysname(device));
- g_mutex_init(&edev->touch.raw_pressed_mutex);
- g_mutex_init(&edev->touch.blocked_mutex);
+ g_rec_mutex_init(&edev->touch.raw_pressed_mutex);
+ g_rec_mutex_init(&edev->touch.blocked_mutex);
if (libinput_device_has_capability(device, LIBINPUT_DEVICE_CAP_KEYBOARD))
{
free(edev->touch.coords);
edev->touch.coords = NULL;
}
- g_mutex_clear(&edev->touch.raw_pressed_mutex);
- g_mutex_clear(&edev->touch.blocked_mutex);
+ g_rec_mutex_clear(&edev->touch.raw_pressed_mutex);
+ g_rec_mutex_clear(&edev->touch.blocked_mutex);
eina_stringshare_del(edev->output_name);
ecore_thread_main_loop_end();
unsigned int pressed;
unsigned int raw_pressed;
Eina_Bool blocked;
- GMutex raw_pressed_mutex;
- GMutex blocked_mutex;
+ GRecMutex raw_pressed_mutex;
+ GRecMutex blocked_mutex;
} touch;
const char *output_name;
return EINA_FALSE;
}
- g_mutex_lock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_lock(&e_comp->input_key_grabs_mutex);
if ((!e_client_action_get()) && (!e_comp->input_key_grabs))
{
ec = e_client_focused_get();
e_comp_wl_input_keyboard_state_update(keycode, pressed);
}
}
- g_mutex_unlock(&e_comp->input_key_grabs_mutex);
+ g_rec_mutex_unlock(&e_comp->input_key_grabs_mutex);
return !!ec;
}