path: root/src/tests/evas/evas_test_image.c
diff options
authorTom Hacohen <>2016-06-01 13:14:30 +0100
committerTom Hacohen <>2016-06-01 13:33:21 +0100
commita6a23389625a5c65747bc648424db18173f563b9 (patch)
treef0c13bdb49c9211a90b9d2a034c2a4333b38af3e /src/tests/evas/evas_test_image.c
parent466d9fbaf1319db4df9d576bdbe196f2557f6627 (diff)
Revert "Eo: Remove eo_del() and make eo_unref() the replacement."
This reverts commit 546ff7bbba788ec834c5608361c0834853f2d5d7. It seems that eo_del() is useful and removing it was creating bugs. The issue is that the way we defined parents in eo, both the parent and the programmer share a reference to the object. When we eo_unref() that reference as the programmer, eo has no way to know it's this specific reference we are freeing, and not a general one, so in some circumstances, for example: eo_ref(child); eo_unref(child); // trying to delete here eo_unref(container); // container is deleted here eo_unref(child); // child already has 0 refs before this point. We would have an issue with references and objects being freed too soon and in general, issue with the references. Having eo_del() solves that, because this one explicitly unparents if there is a parent, meaning the reference ownership is explicitly taken by the programmer. eo_del() is essentially a convenience function around "check if has parent, and if so unparent, otherwise, unref". Which should be used when you want to delete an object although it has a parent, and is equivalent to eo_unref() when it doesn't have one.
Diffstat (limited to 'src/tests/evas/evas_test_image.c')
1 files changed, 3 insertions, 3 deletions
diff --git a/src/tests/evas/evas_test_image.c b/src/tests/evas/evas_test_image.c
index 1408525dc4..7f90754872 100644
--- a/src/tests/evas/evas_test_image.c
+++ b/src/tests/evas/evas_test_image.c
@@ -638,16 +638,16 @@ START_TEST(evas_object_image_defaults)
638 fail_if(evas_object_image_filled_get(o)); 638 fail_if(evas_object_image_filled_get(o));
639 evas_object_image_fill_get(o, &x, &y, &w, &h); 639 evas_object_image_fill_get(o, &x, &y, &w, &h);
640 fail_if(x || y || w || h); 640 fail_if(x || y || w || h);
641 eo_unref(o); 641 eo_del(o);
642 642
643 o = evas_object_image_filled_add(e); 643 o = evas_object_image_filled_add(e);
644 fail_if(!evas_object_image_filled_get(o)); 644 fail_if(!evas_object_image_filled_get(o));
645 eo_unref(o); 645 eo_del(o);
646 646
647 /* test eo defaults */ 647 /* test eo defaults */
648 o = eo_add(EVAS_IMAGE_CLASS, e); 648 o = eo_add(EVAS_IMAGE_CLASS, e);
649 fail_if(!efl_gfx_fill_auto_get(o)); 649 fail_if(!efl_gfx_fill_auto_get(o));
650 eo_unref(o); 650 eo_del(o);
651 651
652 evas_free(e); 652 evas_free(e);
653 evas_shutdown(); 653 evas_shutdown();