numa: use QLIST_FOREACH_SAFE() for RAM block notifiers
Make list traversal work when a callback removes a notifier mid-traversal. This is a cleanup to prevent bugs in the future. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: David Hildenbrand <david@redhat.com> Message-id: 20221013185908.1297568-9-stefanha@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
f4ec04bae9
commit
4fdd0a1a7e
@ -857,8 +857,9 @@ void ram_block_notifier_remove(RAMBlockNotifier *n)
|
||||
void ram_block_notify_add(void *host, size_t size, size_t max_size)
|
||||
{
|
||||
RAMBlockNotifier *notifier;
|
||||
RAMBlockNotifier *next;
|
||||
|
||||
QLIST_FOREACH(notifier, &ram_list.ramblock_notifiers, next) {
|
||||
QLIST_FOREACH_SAFE(notifier, &ram_list.ramblock_notifiers, next, next) {
|
||||
if (notifier->ram_block_added) {
|
||||
notifier->ram_block_added(notifier, host, size, max_size);
|
||||
}
|
||||
@ -868,8 +869,9 @@ void ram_block_notify_add(void *host, size_t size, size_t max_size)
|
||||
void ram_block_notify_remove(void *host, size_t size, size_t max_size)
|
||||
{
|
||||
RAMBlockNotifier *notifier;
|
||||
RAMBlockNotifier *next;
|
||||
|
||||
QLIST_FOREACH(notifier, &ram_list.ramblock_notifiers, next) {
|
||||
QLIST_FOREACH_SAFE(notifier, &ram_list.ramblock_notifiers, next, next) {
|
||||
if (notifier->ram_block_removed) {
|
||||
notifier->ram_block_removed(notifier, host, size, max_size);
|
||||
}
|
||||
@ -879,8 +881,9 @@ void ram_block_notify_remove(void *host, size_t size, size_t max_size)
|
||||
void ram_block_notify_resize(void *host, size_t old_size, size_t new_size)
|
||||
{
|
||||
RAMBlockNotifier *notifier;
|
||||
RAMBlockNotifier *next;
|
||||
|
||||
QLIST_FOREACH(notifier, &ram_list.ramblock_notifiers, next) {
|
||||
QLIST_FOREACH_SAFE(notifier, &ram_list.ramblock_notifiers, next, next) {
|
||||
if (notifier->ram_block_resized) {
|
||||
notifier->ram_block_resized(notifier, host, old_size, new_size);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user