/* hb_user_data_array_t */
+
+/* NOTE: Currently we use a global lock for user_data access
+ * threadsafety. If one day we add a mutex to any object, we
+ * should switch to using that insted for these too.
+ */
+
+static hb_static_mutex_t user_data_mutex;
+
bool
hb_user_data_array_t::set (hb_user_data_key_t *key,
void * data,
{
if (!key)
return false;
+
+ hb_mutex_lock (&user_data_mutex);
+
if (!data && !destroy) {
items.remove (key);
return true;
}
hb_user_data_item_t item = {key, data, destroy};
- return !!items.insert (item);
+ bool ret = !!items.insert (item);
+
+ hb_mutex_unlock (&user_data_mutex);
+
+ return ret;
}
void *
hb_user_data_array_t::get (hb_user_data_key_t *key)
{
+ hb_mutex_lock (&user_data_mutex);
+
hb_user_data_item_t *item = items.find (key);
- return item ? item->data : NULL;
+ void *ret = item ? item->data : NULL;
+
+ hb_mutex_unlock (&user_data_mutex);
+
+ return ret;
}