On 10.03.20 18:59, Paolo Bonzini wrote:
> The mutex and condition variable were never initialized, causing
> -mem-prealloc to abort with an assertion failure.
>
> Fixes: 037fb5eb3941c80a2b7c36a843e47207ddb004d4
> Reported-by: Christian Borntraeger <borntrae...@de.ibm.com>
You might want to replace this by
Reported-by: Marc Hartmayer <mhart...@linux.ibm.com>
> Cc: bauerchen <bauerc...@tencent.com>
> Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
> ---
> util/oslib-posix.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/util/oslib-posix.c b/util/oslib-posix.c
> index 897e8f3ba6..4dd6d7d4b4 100644
> --- a/util/oslib-posix.c
> +++ b/util/oslib-posix.c
> @@ -466,10 +466,17 @@ static inline int get_memset_num_threads(int smp_cpus)
> static bool touch_all_pages(char *area, size_t hpagesize, size_t numpages,
> int smp_cpus)
> {
> + static gsize initialized = 0;
> size_t numpages_per_thread, leftover;
> char *addr = area;
> int i = 0;
>
> + if (g_once_init_enter(&initialized)) {
> + qemu_mutex_init(&page_mutex);
> + qemu_cond_init(&page_cond);
> + g_once_init_leave(&initialized, 1);
> + }
> +
> memset_thread_failed = false;
> threads_created_flag = false;
> memset_num_threads = get_memset_num_threads(smp_cpus);
>