diff --git a/CMakeLists.txt b/CMakeLists.txt index 74fdbcbc0c5..617226b5a36 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -194,11 +194,7 @@ ELSE() ENDIF() -IF("${MYSQL_NO_DASH_VERSION}" VERSION_LESS 11.2) - SET(MEMPROTECT_DEFAULT ON) -ELSE() - SET(MEMPROTECT_DEFAULT OFF) -ENDIF() +SET(MEMPROTECT_DEFAULT ON) OPTION(WITH_PROTECT_STATEMENT_MEMROOT "Enable protection of statement's memory root after first SP/PS execution. Turned into account only for debug build" ${MEMPROTECT_DEFAULT}) diff --git a/mysql-test/main/ps_mem_leaks.result b/mysql-test/main/ps_mem_leaks.result index e934c24288c..95a1f317ae0 100644 --- a/mysql-test/main/ps_mem_leaks.result +++ b/mysql-test/main/ps_mem_leaks.result @@ -149,6 +149,20 @@ DROP TABLE t1; DROP PROCEDURE p1; # End of 10.11 tests # +# MDEV-34649: Memory leaks on running DELETE statement in PS mode with positional parameters +# +CREATE TABLE t1 (a INT, b VARCHAR(30)) CHARSET=utf8mb4; +INSERT INTO t1 VALUES (1, 'one'), (0, NULL), (3, 'three'), (4, 'four'); +PREPARE stmt FROM 'DELETE FROM t1 WHERE b=?' ; +SET @arg00=NULL; +EXECUTE stmt USING @arg00; +SET @arg00='one'; +EXECUTE stmt USING @arg00; +# Clean up +DEALLOCATE PREPARE stmt; +DROP TABLE t1; +# End of 11.1 +# # MDEV-34517: Memory leak on re-compilation of a failing statement inside a stored routine # CREATE TABLE t1 (a INT); diff --git a/mysql-test/main/ps_mem_leaks.test b/mysql-test/main/ps_mem_leaks.test index 17baf122d16..951bc7e337a 100644 --- a/mysql-test/main/ps_mem_leaks.test +++ b/mysql-test/main/ps_mem_leaks.test @@ -168,6 +168,24 @@ DROP PROCEDURE p1; --echo # End of 10.11 tests +--echo # +--echo # MDEV-34649: Memory leaks on running DELETE statement in PS mode with positional parameters +--echo # +CREATE TABLE t1 (a INT, b VARCHAR(30)) CHARSET=utf8mb4; +INSERT INTO t1 VALUES (1, 'one'), (0, NULL), (3, 'three'), (4, 'four'); +PREPARE stmt FROM 'DELETE FROM t1 WHERE b=?' ; +SET @arg00=NULL; +EXECUTE stmt USING @arg00; +SET @arg00='one'; +# Without the patch, attempt to run the same prepared statement the second time +# would result in memory leaks +EXECUTE stmt USING @arg00; +--echo # Clean up +DEALLOCATE PREPARE stmt; +DROP TABLE t1; + +--echo # End of 11.1 + --echo # --echo # MDEV-34517: Memory leak on re-compilation of a failing statement inside a stored routine --echo # diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index b7b3b79bbb6..b1fc89b2a28 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -912,6 +912,7 @@ cleanup: { thd->lex->current_select->save_leaf_tables(thd); thd->lex->current_select->leaf_tables_saved= true; + thd->lex->current_select->first_cond_optimization= false; } delete deltempfile;