#define FIND_NOTIFIER(a, b, d, e, f) \
SYS_G_LIST_FOREACH(a, b, d) \
- if (e == d->e && f == (d->f))
+ if (e == d->e && f == (d->f) && !d->deleted)
#define NOTIFY_STR(x) [(x)] = __stringify((x))
device_notify_once(DEVICE_NOTIFIER_LOWBAT, (void *)(intptr_t) 0x9a9a9a9a);
}
+static void test_destroy_callback_p3(void **state)
+{
+ int retval;
+
+ retval = register_notifier(DEVICE_NOTIFIER_UPSM, notify_callback);
+ assert_int_equal(retval, 0);
+ expect_value(notify_callback, data, (void *)(intptr_t) 0x3f3f3f3f);
+ device_notify(DEVICE_NOTIFIER_UPSM, (void *)(intptr_t) 0x3f3f3f3f);
+
+ /* notify_callback() should not be invoked */
+ unregister_notifier(DEVICE_NOTIFIER_UPSM, notify_callback);
+ device_notify(DEVICE_NOTIFIER_UPSM, (void *)(intptr_t) 0x34ab34ab);
+
+ /* if a notifier have successfully been deleted,
+ * re-registering the notifier must be successful */
+ retval = register_notifier(DEVICE_NOTIFIER_UPSM, notify_callback);
+ assert_int_equal(retval, 0);
+
+ expect_value(notify_callback, data, (void *)(intptr_t) 0x7878444);
+ device_notify(DEVICE_NOTIFIER_UPSM, (void *)(intptr_t) 0x7878444);
+}
+
static void test_device_notify_priority_p1(void **state)
{
int id1, id2, id3;
cmocka_unit_test(test_device_notify_once_p),
cmocka_unit_test(test_destroy_callback_p1),
cmocka_unit_test(test_destroy_callback_p2),
+ cmocka_unit_test(test_destroy_callback_p3),
cmocka_unit_test(test_device_notify_priority_p1),
};