Bug #30882 | Dropping a temporary table inside a stored function may cause a server crash | ||
---|---|---|---|
Submitted: | 7 Sep 2007 4:01 | Modified: | 9 Nov 2007 0:05 |
Reporter: | Davi Arnaut (OCA) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Stored Routines | Severity: | S3 (Non-critical) |
Version: | 5.0/5.1BK | OS: | Any |
Assigned to: | Davi Arnaut | CPU Architecture: | Any |
[7 Sep 2007 4:01]
Davi Arnaut
[10 Sep 2007 13:39]
MySQL Verification Team
Thank you for the bug report. Verified as described. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.0.50-debug Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> delimiter | mysql> create function f1() returns int -> begin -> drop temporary table t1; -> return 1; -> end| Query OK, 0 rows affected (0.04 sec) mysql> delimiter ; mysql> create temporary table t1 as select f1(); ERROR 2013 (HY000): Lost connection to MySQL server during query mysql>
[1 Nov 2007 20:53]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/36924 ChangeSet@1.2613, 2007-11-01 18:52:56-02:00, davi@endora.local +15 -0 Bug#30882 Dropping a temporary table inside a stored function may cause a server crash If a stored function that contains a drop temporary table statement is invoked by a create temporary table of the same name may cause a server crash. The problem is that when dropping a table no check is done to ensure that table is not being used by some outer query (or outer statement), potentially leaving the outer query with a reference to a stale (freed) table. The solution is when dropping a temporary table, always check if the table is being used by some outer statement as a temporary table can be dropped inside stored procedures. The check is performed by looking at the TABLE::query_id value for temporary tables. To simplify this check and to solve a bug related to handling of temporary tables in prelocked mode, this patch changes the way in which this member is used to track the fact that table is used/unused. Now we ensure that TABLE::query_id is zero for unused temporary tables (which means that all temporary tables which were used by a statement should be marked as free for reuse after it's execution has been completed).
[7 Nov 2007 22:00]
Bugs System
Pushed into 6.0.4-alpha
[7 Nov 2007 22:01]
Bugs System
Pushed into 5.1.23-rc
[9 Nov 2007 0:05]
Paul DuBois
Noted in 5.1.23, 6.0.4 changelogs. A server crash could occur if a stored function that contained a DROP TEMPORARY TABLE statement was invoked by a CREATE TEMPORARY TABLE statement that created a table of the same name.
[7 Dec 2009 6:01]
Roel Van de Paar
Also note bug #29537
[1 Mar 2011 14:22]
Jon Olav Hauglid
Bug#36089 was closed as a duplicate of this bug.