Commit 69077dea authored by Vladislav Vaintroub's avatar Vladislav Vaintroub

MDEV-22578 thread_pool_info crashes with clang6, using SSE instructions on unaligned memory

Apparently, in stats_reset_table(), the innocuous

  memset(&group->counters, 0, sizeof(group->counters));

is converted by clang to SSE2 instructions.

The problem is that "group" is not correctly aligned,
despite  MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) in the thread_group_t
declaration.

It is not aligned because it was allocated with my_malloc, since
commit fd9f1638, MDEV-5205. Previously all_groups was a
statically allocated array.

Fix is to remove MY_ALIGNED, and pad the struct instead.
parent f2a94451
......@@ -126,7 +126,7 @@ struct thread_group_counters_t
ulonglong polls[2];
};
struct MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) thread_group_t
struct thread_group_t
{
mysql_mutex_t mutex;
connection_queue_t queues[NQUEUES];
......@@ -145,6 +145,7 @@ struct MY_ALIGNED(CPU_LEVEL1_DCACHE_LINESIZE) thread_group_t
bool shutdown;
bool stalled;
thread_group_counters_t counters;
char pad[CPU_LEVEL1_DCACHE_LINESIZE];
};
#define TP_INCREMENT_GROUP_COUNTER(group,var) do {group->counters.var++;}while(0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment