From 4d5d91efeff9081f9da351b518e23255718e5197 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Fri, 29 Jun 2012 14:48:26 +0200 Subject: [PATCH] Fix: _session_list in child.h must be locked The _session_list can be modified concurrently, so the iteration over the list must be locked. --- base/include/base/child.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/base/include/base/child.h b/base/include/base/child.h index fe66b57ed8..a0a4c4ea21 100644 --- a/base/include/base/child.h +++ b/base/include/base/child.h @@ -338,8 +338,6 @@ namespace Genode { */ void _remove_session(Session *s) { - Lock::Guard lock_guard(_lock); - /* forget about this session */ _session_pool.remove(s); _session_list.remove(s); @@ -420,8 +418,9 @@ namespace Genode { */ void revoke_server(const Server *server) { - while (1) { + Lock::Guard lock_guard(_lock); + while (1) { /* search session belonging to the specified server */ Session *s = _session_list.first(); for ( ; s && (s->server() != server); s = s->next()); @@ -575,6 +574,7 @@ namespace Genode { } } + Lock::Guard lock_guard(_lock); _remove_session(s); }