From 1c3b83242da96f1d94ef3df34c399c1b984668b6 Mon Sep 17 00:00:00 2001 From: Olivier Houchard Date: Fri, 7 Jun 2019 14:35:35 +0200 Subject: [PATCH] MINOR: chunks: Make sure trash_size is only set once. The trash_size variable is shared by all threads, and is set by all threads, when alloc_trash_buffers() is called. To make sure it's set only once, to silence a harmless data race, use a CAS to set it, and only set it if it was 0. --- src/chunk.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/chunk.c b/src/chunk.c index 8e77858c3..344b28d20 100644 --- a/src/chunk.c +++ b/src/chunk.c @@ -68,8 +68,9 @@ struct buffer *get_trash_chunk(void) */ static int alloc_trash_buffers(int bufsize) { + int old = 0; chunk_init(&trash, my_realloc2(trash.area, bufsize), bufsize); - trash_size = bufsize; + HA_ATOMIC_CAS(&trash_size, &old, bufsize); trash_buf1 = (char *)my_realloc2(trash_buf1, bufsize); trash_buf2 = (char *)my_realloc2(trash_buf2, bufsize); return trash.area && trash_buf1 && trash_buf2;