diff --git a/legacy/eobj/lib/Eo.h b/legacy/eobj/lib/Eo.h index 47b05ccba6..e17c4c5cf2 100644 --- a/legacy/eobj/lib/Eo.h +++ b/legacy/eobj/lib/Eo.h @@ -907,6 +907,21 @@ enum { */ #define eo_wref_del(wref) EO_BASE_ID(EO_BASE_SUB_ID_WREF_DEL), EO_TYPECHECK(Eo **, wref) +/** + * @def eo_wref_del_safe + * @brief Delete the weak reference passed. + * @param wref the weak reference to free. + * + * Same as eo_wref_del(), with the different that it's not called from eobj_do() + * so you don't need to check if *wref is not NULL. + * + * @see #eo_wref_del + */ +#define eo_wref_del_safe(wref) \ + do { \ + if (*wref) eo_do(*wref, eo_wref_del(wref)); \ + } while (0) + /** * @var _EO_EV_CALLBACK_ADD * see EO_EV_CALLBACK_ADD diff --git a/legacy/eobj/tests/eo_test_general.c b/legacy/eobj/tests/eo_test_general.c index 080332276b..424b764bd2 100644 --- a/legacy/eobj/tests/eo_test_general.c +++ b/legacy/eobj/tests/eo_test_general.c @@ -98,7 +98,7 @@ START_TEST(eo_weak_reference) eo_do(obj, eo_wref_add(&wref)); eo_do(obj2, eo_wref_del(&wref)); fail_if(!wref); - eo_do(obj, eo_wref_del(&wref)); + eo_wref_del_safe(&wref); fail_if(wref); eo_unref(obj);