diff --git a/mysql-test/r/variables-big.result b/mysql-test/r/variables-big.result new file mode 100644 index 00000000000..d7906869276 --- /dev/null +++ b/mysql-test/r/variables-big.result @@ -0,0 +1,20 @@ +set session transaction_prealloc_size=1024*1024*1024*1; +show processlist; +Id User Host db Command Time State Info +1 root localhost test Query 0 NULL show processlist +set session transaction_prealloc_size=1024*1024*1024*2; +show processlist; +Id User Host db Command Time State Info +1 root localhost test Query 2 NULL show processlist +set session transaction_prealloc_size=1024*1024*1024*3; +show processlist; +Id User Host db Command Time State Info +1 root localhost test Query 0 NULL show processlist +set session transaction_prealloc_size=1024*1024*1024*4; +show processlist; +Id User Host db Command Time State Info +1 root localhost test Query 0 NULL show processlist +set session transaction_prealloc_size=1024*1024*1024*5; +show processlist; +Id User Host db Command Time State Info +1 root localhost test Query 0 NULL show processlist diff --git a/mysql-test/t/variables-big.test b/mysql-test/t/variables-big.test new file mode 100644 index 00000000000..43326f3d016 --- /dev/null +++ b/mysql-test/t/variables-big.test @@ -0,0 +1,20 @@ +# +# test variables big +# + +--source include/big_test.inc + +# +# Bug #27322 failure to allocate transaction_prealloc_size causes crash +# + +set session transaction_prealloc_size=1024*1024*1024*1; +show processlist; +set session transaction_prealloc_size=1024*1024*1024*2; +show processlist; +set session transaction_prealloc_size=1024*1024*1024*3; +show processlist; +set session transaction_prealloc_size=1024*1024*1024*4; +show processlist; +set session transaction_prealloc_size=1024*1024*1024*5; +show processlist; diff --git a/mysys/my_alloc.c b/mysys/my_alloc.c index 5a0ac7b87f7..233abf793e0 100644 --- a/mysys/my_alloc.c +++ b/mysys/my_alloc.c @@ -133,6 +133,10 @@ void reset_root_defaults(MEM_ROOT *mem_root, uint block_size, mem->next= *prev; *prev= mem_root->pre_alloc= mem; } + else + { + mem_root->pre_alloc= 0; + } } } else