*/
static Eina_List *efreet_desktop_types = NULL;
+static Eina_Lock _lock;
+
EAPI int EFREET_DESKTOP_TYPE_APPLICATION = 0;
EAPI int EFREET_DESKTOP_TYPE_LINK = 0;
EAPI int EFREET_DESKTOP_TYPE_DIRECTORY = 0;
}
#endif
+ if (!eina_lock_new(&_lock))
+ {
+ ERR("Could not create lock");
+ goto error;
+ }
+
efreet_desktop_types = NULL;
EFREET_DESKTOP_TYPE_APPLICATION = efreet_desktop_type_add("Application",
NULL, NULL);
return 1;
-#ifdef HAVE_EVIL
error:
eina_log_domain_unregister(_efreet_desktop_log_dom);
_efreet_desktop_log_dom = -1;
return 0;
-#endif
}
/**
IF_RELEASE(desktop_environment);
EINA_LIST_FREE(efreet_desktop_types, info)
efreet_desktop_type_info_free(info);
+ eina_lock_free(&_lock);
#ifdef HAVE_EVIL
evil_sockets_shutdown();
#endif
efreet_desktop_ref(Efreet_Desktop *desktop)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(desktop, 0);
+ eina_lock_take(&_lock);
desktop->ref++;
+ eina_lock_release(&_lock);
return desktop->ref;
}
free(tmp);
if (desktop)
{
+ eina_lock_take(&_lock);
desktop->ref++;
+ eina_lock_release(&_lock);
if (!efreet_desktop_environment_check(desktop))
{
efreet_desktop_free(desktop);
{
if (!desktop) return;
+ eina_lock_take(&_lock);
desktop->ref--;
- if (desktop->ref > 0) return;
+ if (desktop->ref > 0)
+ {
+ eina_lock_release(&_lock);
+ return;
+ }
if (desktop->eet)
{
}
free(desktop);
}
+ eina_lock_release(&_lock);
}
EAPI void
if (eina_list_search_unsorted(desktop->categories,
EINA_COMPARE_CB(strcmp), category)) return;
+ eina_lock_take(&_lock);
desktop->categories = eina_list_append(desktop->categories,
(void *)eina_stringshare_add(category));
+ eina_lock_release(&_lock);
}
EAPI int
if ((found = eina_list_search_unsorted(desktop->categories,
EINA_COMPARE_CB(strcmp), category)))
{
- eina_stringshare_del(found);
+ eina_lock_take(&_lock);
desktop->categories = eina_list_remove(desktop->categories, found);
+ eina_stringshare_del(found);
+ eina_lock_release(&_lock);
return 1;
}
EINA_SAFETY_ON_NULL_RETURN_VAL(desktop, EINA_FALSE);
EINA_SAFETY_ON_TRUE_RETURN_VAL(strncmp(key, "X-", 2), EINA_FALSE);
+ eina_lock_take(&_lock);
if (!desktop->x)
desktop->x = eina_hash_string_superfast_new(EINA_FREE_CB(eina_stringshare_del));
eina_hash_del_by_key(desktop->x, key);
eina_hash_add(desktop->x, key, eina_stringshare_add(data));
+ eina_lock_release(&_lock);
return EINA_TRUE;
}
EAPI Eina_Bool
efreet_desktop_x_field_del(Efreet_Desktop *desktop, const char *key)
{
+ Eina_Bool ret;
EINA_SAFETY_ON_NULL_RETURN_VAL(desktop, EINA_FALSE);
EINA_SAFETY_ON_TRUE_RETURN_VAL(strncmp(key, "X-", 2), EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(desktop->x, EINA_FALSE);
- return eina_hash_del_by_key(desktop->x, key);
+ eina_lock_take(&_lock);
+ ret = eina_hash_del_by_key(desktop->x, key);
+ eina_lock_release(&_lock);
+ return ret;
}
EAPI void *