1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-09 22:24:09 +03:00

MDEV-36720 Possible memory leak on updating table with index without overlaps

when closing a lookup_handler, don't forget to close it in PSI too
This commit is contained in:
Sergei Golubchik
2025-05-16 11:29:56 +02:00
parent 9306353d2d
commit cb7978a12d
3 changed files with 46 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
#
# MDEV-36720 Possible memory leak on updating table with index without overlaps
#
create table t1 (id int not null primary key auto_increment, rel_id int not null, start_date datetime not null, end_date datetime not null, period for p (start_date, end_date), unique key (rel_id, p without overlaps));
insert into t1 (rel_id, start_date, end_date) values (1, '2024-01-01', '2025-01-01');
select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1';
object_type object_schema object_name owner_thread_id owner_event_id internal_lock external_lock
TABLE test t1 0 0 WRITE CONCURRENT INSERT NULL
update t1 set end_date = '2025-01-16' where id = 1;
select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1';
object_type object_schema object_name owner_thread_id owner_event_id internal_lock external_lock
TABLE test t1 0 0 WRITE NULL
update t1 set end_date = '2025-01-16' where id = 1;
select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1';
object_type object_schema object_name owner_thread_id owner_event_id internal_lock external_lock
TABLE test t1 0 0 WRITE NULL
update t1 set end_date = '2025-01-16' where id = 1;
select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1';
object_type object_schema object_name owner_thread_id owner_event_id internal_lock external_lock
TABLE test t1 0 0 WRITE NULL
update t1 set end_date = '2025-01-16' where id = 1;
select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1';
object_type object_schema object_name owner_thread_id owner_event_id internal_lock external_lock
TABLE test t1 0 0 WRITE NULL
drop table t1;
# End of 10.11 tests

View File

@@ -0,0 +1,19 @@
--source include/not_embedded.inc
--source include/have_perfschema.inc
--echo #
--echo # MDEV-36720 Possible memory leak on updating table with index without overlaps
--echo #
create table t1 (id int not null primary key auto_increment, rel_id int not null, start_date datetime not null, end_date datetime not null, period for p (start_date, end_date), unique key (rel_id, p without overlaps));
insert into t1 (rel_id, start_date, end_date) values (1, '2024-01-01', '2025-01-01');
select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1';
update t1 set end_date = '2025-01-16' where id = 1;
select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1';
update t1 set end_date = '2025-01-16' where id = 1;
select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1';
update t1 set end_date = '2025-01-16' where id = 1;
select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1';
update t1 set end_date = '2025-01-16' where id = 1;
select object_type,object_schema,object_name,owner_thread_id,owner_event_id,internal_lock,external_lock from performance_schema.table_handles where object_name='t1';
drop table t1;
--echo # End of 10.11 tests

View File

@@ -7346,6 +7346,7 @@ int handler::ha_reset()
{ {
lookup_handler->ha_external_unlock(table->in_use); lookup_handler->ha_external_unlock(table->in_use);
lookup_handler->close(); lookup_handler->close();
PSI_CALL_close_table(table_share, lookup_handler->m_psi);
delete lookup_handler; delete lookup_handler;
lookup_handler= this; lookup_handler= this;
} }