aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Hacohen <tom@stosb.com>2015-10-15 17:51:20 +0100
committerTom Hacohen <tom@stosb.com>2015-10-19 10:22:41 +0100
commit37c07b07d492a37185b0e5dc404a6efa03c4ad16 (patch)
treefcd6e8b27eb349233ff0489f0ef95db3872841b9
parentEo: Split object checking from class checking and simplify. (diff)
downloadefl-37c07b07d492a37185b0e5dc404a6efa03c4ad16.tar.gz
Eo unref: Decrease amount of checks and hint branch prediction.
This may look minor, but this is such a hot path, that this actually speeds things up a bit.
-rw-r--r--src/lib/eo/eo_private.h13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/lib/eo/eo_private.h b/src/lib/eo/eo_private.h
index 579ac6d869..135966daf6 100644
--- a/src/lib/eo/eo_private.h
+++ b/src/lib/eo/eo_private.h
@@ -277,8 +277,14 @@ static inline void
_eo_unref(_Eo_Object *obj)
{
--(obj->refcount);
- if (obj->refcount == 0)
+ if (EINA_UNLIKELY(obj->refcount <= 0))
{
+ if (obj->refcount < 0)
+ {
+ ERR("Obj:%p. Refcount (%d) < 0. Too many unrefs.", obj, obj->refcount);
+ return;
+ }
+
if (obj->destructed)
{
ERR("Object %p already destructed.", _eo_id_get(obj));
@@ -320,11 +326,6 @@ _eo_unref(_Eo_Object *obj)
else
_eo_ref(obj); /* If we manual free, we keep a phantom ref. */
}
- else if (obj->refcount < 0)
- {
- ERR("Obj:%p. Refcount (%d) < 0. Too many unrefs.", obj, obj->refcount);
- return;
- }
}
#endif