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.
*/
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;