Eo: Added eo_wref_del_safe.
authorTom Hacohen <tom@stosb.com>
Tue, 1 May 2012 11:25:03 +0000 (11:25 +0000)
committerTom Hacohen <tom@stosb.com>
Tue, 1 May 2012 11:25:03 +0000 (11:25 +0000)
SVN revision: 70573

legacy/eobj/lib/Eo.h
legacy/eobj/tests/eo_test_general.c

index 47b05cc..e17c4c5 100644 (file)
@@ -908,6 +908,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
  */
index 0803322..424b764 100644 (file)
@@ -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);