mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 10:14:19 +01:00
MDEV-13748 Assertion `status_var.local_memory_used == 0 || !debug_assert_on_not_freed_memory' failed in virtual THD::~THD after query with INTERSECT
my_safe_alloca()/my_safe_afree() work as alloca() or malloc()/free() depending on the memory size to allocate, that is, depending on reclength here. They only work correctly if reclength doesn't change in the middle.
This commit is contained in:
parent
c8afe7daac
commit
2709380587
3 changed files with 16 additions and 5 deletions
4
mysql-test/suite/maria/dynamic.result
Normal file
4
mysql-test/suite/maria/dynamic.result
Normal file
|
@ -0,0 +1,4 @@
|
|||
create table t1 (a blob, b varchar(20000)) engine=aria row_format=dynamic;
|
||||
insert t1 (b) values (repeat('a', 20000));
|
||||
update t1 set b='b';
|
||||
drop table t1;
|
7
mysql-test/suite/maria/dynamic.test
Normal file
7
mysql-test/suite/maria/dynamic.test
Normal file
|
@ -0,0 +1,7 @@
|
|||
#
|
||||
# MDEV-13748 Assertion `status_var.local_memory_used == 0 || !debug_assert_on_not_freed_memory' failed in virtual THD::~THD after query with INTERSECT
|
||||
#
|
||||
create table t1 (a blob, b varchar(20000)) engine=aria row_format=dynamic;
|
||||
insert t1 (b) values (repeat('a', 20000));
|
||||
update t1 set b='b';
|
||||
drop table t1;
|
|
@ -276,7 +276,7 @@ my_bool _ma_update_blob_record(MARIA_HA *info, MARIA_RECORD_POS pos,
|
|||
{
|
||||
uchar *rec_buff;
|
||||
int error;
|
||||
ulong reclength,extra;
|
||||
ulong reclength,reclength2,extra;
|
||||
|
||||
extra= (ALIGN_SIZE(MARIA_MAX_DYN_BLOCK_HEADER)+MARIA_SPLIT_LENGTH+
|
||||
MARIA_DYN_DELETE_BLOCK_HEADER);
|
||||
|
@ -289,17 +289,17 @@ my_bool _ma_update_blob_record(MARIA_HA *info, MARIA_RECORD_POS pos,
|
|||
return 1;
|
||||
}
|
||||
#endif
|
||||
if (!(rec_buff=(uchar*) my_safe_alloca(reclength,
|
||||
MARIA_MAX_RECORD_ON_STACK)))
|
||||
if (!(rec_buff=(uchar*) my_safe_alloca(reclength, MARIA_MAX_RECORD_ON_STACK)))
|
||||
{
|
||||
my_errno= HA_ERR_OUT_OF_MEM; /* purecov: inspected */
|
||||
return(1);
|
||||
}
|
||||
reclength= _ma_rec_pack(info,rec_buff+ALIGN_SIZE(MARIA_MAX_DYN_BLOCK_HEADER),
|
||||
reclength2= _ma_rec_pack(info,rec_buff+ALIGN_SIZE(MARIA_MAX_DYN_BLOCK_HEADER),
|
||||
record);
|
||||
DBUG_ASSERT(reclength2 <= reclength);
|
||||
error=update_dynamic_record(info,pos,
|
||||
rec_buff+ALIGN_SIZE(MARIA_MAX_DYN_BLOCK_HEADER),
|
||||
reclength);
|
||||
reclength2);
|
||||
my_safe_afree(rec_buff, reclength, MARIA_MAX_RECORD_ON_STACK);
|
||||
return(error != 0);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue