{
Eina_Share *share;
- if (_eina_share_common_count++ != 0)
- return EINA_TRUE;
-
share = *_share = calloc(sizeof(Eina_Share), 1);
if (!share) goto on_error;
_eina_share_common_population_init(share);
+ /* below is the common part among other all eina_share_common user */
+ if (_eina_share_common_count++ != 0)
+ return EINA_TRUE;
+
eina_lock_new(&_mutex_big);
return EINA_TRUE;
unsigned int i;
Eina_Share *share = *_share;
- if (--_eina_share_common_count != 0)
- return EINA_TRUE;
-
eina_lock_take(&_mutex_big);
_eina_share_common_population_stats(share);
eina_lock_release(&_mutex_big);
- eina_lock_free(&_mutex_big);
-
free(*_share);
*_share = NULL;
+
+ /* below is the common part among other all eina_share_common user */
+ if (--_eina_share_common_count != 0)
+ return EINA_TRUE;
+
+ eina_lock_free(&_mutex_big);
+
return EINA_TRUE;
}