mirror of
https://github.com/MariaDB/server.git
synced 2025-04-01 04:45:37 +02:00
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.
This commit is contained in:
parent
f2a944516e
commit
69077dea25
1 changed files with 2 additions and 1 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue