From 4421d1bab6529132ee8b8988d2c2e538002906f5 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Fri, 2 Aug 2019 16:57:55 +0100 Subject: llcache: Ensure we preserve iteratorness when sending messages In order to prevent a problem where iterating causes an abort which causes an iteration which clears the iteratorness of a user allowing it to delete itself causing a segfault, preserve the iteratorness when iterating in send_message Signed-off-by: Daniel Silverstone --- content/llcache.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'content/llcache.c') diff --git a/content/llcache.c b/content/llcache.c index ff21d29ab..34b43d702 100644 --- a/content/llcache.c +++ b/content/llcache.c @@ -393,6 +393,7 @@ static nserror llcache_send_event_to_users(llcache_object *object, user = object->users; while (user != NULL) { + bool was_target = user->iterator_target; user->iterator_target = true; error = user->handle->cb(user->handle, event, @@ -400,7 +401,7 @@ static nserror llcache_send_event_to_users(llcache_object *object, next_user = user->next; - user->iterator_target = false; + user->iterator_target = was_target; if (user->queued_for_delete) { llcache_object_remove_user(object, user); -- cgit v1.2.3