notify.c (1742B)
1/* 2 * Notifier lists 3 * 4 * Copyright IBM, Corp. 2010 5 * 6 * Authors: 7 * Anthony Liguori <aliguori@us.ibm.com> 8 * 9 * This work is licensed under the terms of the GNU GPL, version 2. See 10 * the COPYING file in the top-level directory. 11 * 12 * Contributions after 2012-01-13 are licensed under the terms of the 13 * GNU GPL, version 2 or (at your option) any later version. 14 */ 15 16#include "qemu/osdep.h" 17#include "qemu/notify.h" 18 19void notifier_list_init(NotifierList *list) 20{ 21 QLIST_INIT(&list->notifiers); 22} 23 24void notifier_list_add(NotifierList *list, Notifier *notifier) 25{ 26 QLIST_INSERT_HEAD(&list->notifiers, notifier, node); 27} 28 29void notifier_remove(Notifier *notifier) 30{ 31 QLIST_REMOVE(notifier, node); 32} 33 34void notifier_list_notify(NotifierList *list, void *data) 35{ 36 Notifier *notifier, *next; 37 38 QLIST_FOREACH_SAFE(notifier, &list->notifiers, node, next) { 39 notifier->notify(notifier, data); 40 } 41} 42 43bool notifier_list_empty(NotifierList *list) 44{ 45 return QLIST_EMPTY(&list->notifiers); 46} 47 48void notifier_with_return_list_init(NotifierWithReturnList *list) 49{ 50 QLIST_INIT(&list->notifiers); 51} 52 53void notifier_with_return_list_add(NotifierWithReturnList *list, 54 NotifierWithReturn *notifier) 55{ 56 QLIST_INSERT_HEAD(&list->notifiers, notifier, node); 57} 58 59void notifier_with_return_remove(NotifierWithReturn *notifier) 60{ 61 QLIST_REMOVE(notifier, node); 62} 63 64int notifier_with_return_list_notify(NotifierWithReturnList *list, void *data) 65{ 66 NotifierWithReturn *notifier, *next; 67 int ret = 0; 68 69 QLIST_FOREACH_SAFE(notifier, &list->notifiers, node, next) { 70 ret = notifier->notify(notifier, data); 71 if (ret != 0) { 72 break; 73 } 74 } 75 return ret; 76}