Skip to content

Commit cb7978a

Browse files
committed
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
1 parent 9306353 commit cb7978a

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#
2+
# MDEV-36720 Possible memory leak on updating table with index without overlaps
3+
#
4+
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));
5+
insert into t1 (rel_id, start_date, end_date) values (1, '2024-01-01', '2025-01-01');
6+
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';
7+
object_type object_schema object_name owner_thread_id owner_event_id internal_lock external_lock
8+
TABLE test t1 0 0 WRITE CONCURRENT INSERT NULL
9+
update t1 set end_date = '2025-01-16' where id = 1;
10+
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';
11+
object_type object_schema object_name owner_thread_id owner_event_id internal_lock external_lock
12+
TABLE test t1 0 0 WRITE NULL
13+
update t1 set end_date = '2025-01-16' where id = 1;
14+
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';
15+
object_type object_schema object_name owner_thread_id owner_event_id internal_lock external_lock
16+
TABLE test t1 0 0 WRITE NULL
17+
update t1 set end_date = '2025-01-16' where id = 1;
18+
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';
19+
object_type object_schema object_name owner_thread_id owner_event_id internal_lock external_lock
20+
TABLE test t1 0 0 WRITE NULL
21+
update t1 set end_date = '2025-01-16' where id = 1;
22+
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';
23+
object_type object_schema object_name owner_thread_id owner_event_id internal_lock external_lock
24+
TABLE test t1 0 0 WRITE NULL
25+
drop table t1;
26+
# End of 10.11 tests
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
--source include/not_embedded.inc
2+
--source include/have_perfschema.inc
3+
--echo #
4+
--echo # MDEV-36720 Possible memory leak on updating table with index without overlaps
5+
--echo #
6+
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));
7+
insert into t1 (rel_id, start_date, end_date) values (1, '2024-01-01', '2025-01-01');
8+
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';
9+
update t1 set end_date = '2025-01-16' where id = 1;
10+
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';
11+
update t1 set end_date = '2025-01-16' where id = 1;
12+
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';
13+
update t1 set end_date = '2025-01-16' where id = 1;
14+
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';
15+
update t1 set end_date = '2025-01-16' where id = 1;
16+
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';
17+
drop table t1;
18+
19+
--echo # End of 10.11 tests

sql/handler.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7346,6 +7346,7 @@ int handler::ha_reset()
73467346
{
73477347
lookup_handler->ha_external_unlock(table->in_use);
73487348
lookup_handler->close();
7349+
PSI_CALL_close_table(table_share, lookup_handler->m_psi);
73497350
delete lookup_handler;
73507351
lookup_handler= this;
73517352
}

0 commit comments

Comments
 (0)