[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 10/15] linux-user/syscall: extend lock around cpu
From: |
Alex Bennée |
Subject: |
[Qemu-devel] [PATCH v3 10/15] linux-user/syscall: extend lock around cpu-list |
Date: |
Fri, 30 Sep 2016 22:31:01 +0100 |
There is a potential race if several threads exit at once. To serialise
the exits extend the lock above the initial checking of the CPU list.
Signed-off-by: Alex Bennée <address@hidden>
---
linux-user/syscall.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 0815f30..fa559be 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -7476,13 +7476,16 @@ abi_long do_syscall(void *cpu_env, int num, abi_long
arg1,
break;
}
+ cpu_list_lock();
+
if (CPU_NEXT(first_cpu)) {
TaskState *ts;
- cpu_list_lock();
/* Remove the CPU from the list. */
QTAILQ_REMOVE(&cpus, cpu, node);
+
cpu_list_unlock();
+
ts = cpu->opaque;
if (ts->child_tidptr) {
put_user_u32(0, ts->child_tidptr);
@@ -7495,6 +7498,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
rcu_unregister_thread();
pthread_exit(NULL);
}
+
+ cpu_list_unlock();
#ifdef TARGET_GPROF
_mcleanup();
#endif
--
2.9.3
- [Qemu-devel] [PATCH v3 00/15] A number of fixes for ThreadSanitizer, Alex Bennée, 2016/09/30
- [Qemu-devel] [PATCH v3 01/15] atomic.h: fix __SANITIZE_THREAD__ build, Alex Bennée, 2016/09/30
- [Qemu-devel] [PATCH v3 03/15] exec-all.h: revert tb_page_addr_t to target_ulong, Alex Bennée, 2016/09/30
- [Qemu-devel] [PATCH v3 06/15] qom/object: update class cache atomically, Alex Bennée, 2016/09/30
- [Qemu-devel] [PATCH v3 02/15] atomic.h: comment on use of atomic_read/set, Alex Bennée, 2016/09/30
- [Qemu-devel] [PATCH v3 04/15] tcg/optimize: move default return out of if statement, Alex Bennée, 2016/09/30
- [Qemu-devel] [PATCH v3 10/15] linux-user/syscall: extend lock around cpu-list,
Alex Bennée <=
- [Qemu-devel] [PATCH v3 05/15] seqlock: use atomic writes for the sequence, Alex Bennée, 2016/09/30
- [Qemu-devel] [PATCH v3 08/15] cpu: atomically modify cpu->exit_request, Alex Bennée, 2016/09/30
- [Qemu-devel] [PATCH v3 07/15] qom/cpu: atomically clear the tb_jmp_cache, Alex Bennée, 2016/09/30
- [Qemu-devel] [PATCH v3 11/15] qga/command: use QEMU atomic primitives, Alex Bennée, 2016/09/30
- [Qemu-devel] [PATCH v3 12/15] .travis.yml: add gcc sanitizer build, Alex Bennée, 2016/09/30
- [Qemu-devel] [PATCH v3 13/15] tcg: ensure cpu_tb_exec/tb_gen_code use atomic_read/write, Alex Bennée, 2016/09/30