Commit 1241a9da authored by unknown's avatar unknown

The fix for BUG 21136 (ChangeSet@1.2611.1.1) introduced a regression that

caused a few tests to fail because the thd->extra_lock wasn't being set to
NULL after the table was unlocked. This poses a serious problem because later
attempts to access thd->extra_lock (now a dangling pointer) will probably
result in a crash (undefined behavior) -- and that's what actually happens
in some test cases.

The solution is to set the select_create::m_plock pointee to NULL, which
means that thd->extra_lock is set to NULL when the lock data is not for a
temporary table.


sql/sql_insert.cc:
  Set the m_plock pointee to NULL, thus avoiding a dangling thd->extra_lock pointer
  in some cases.
parent 3c66a859
...@@ -3653,7 +3653,8 @@ bool select_create::send_eof() ...@@ -3653,7 +3653,8 @@ bool select_create::send_eof()
if (m_plock) if (m_plock)
{ {
mysql_unlock_tables(thd, *m_plock); mysql_unlock_tables(thd, *m_plock);
m_plock= 0; *m_plock= NULL;
m_plock= NULL;
} }
} }
return tmp; return tmp;
...@@ -3691,7 +3692,8 @@ void select_create::abort() ...@@ -3691,7 +3692,8 @@ void select_create::abort()
if (m_plock) if (m_plock)
{ {
mysql_unlock_tables(thd, *m_plock); mysql_unlock_tables(thd, *m_plock);
m_plock= 0; *m_plock= NULL;
m_plock= NULL;
} }
if (table) if (table)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment