Commit 9228a1c5 authored by andrey@lmy004's avatar andrey@lmy004

Merge ahristov@bk-internal.mysql.com:/home/bk/mysql-5.1-new

into lmy004.:/work/mysql-5.1-bug16406
parents 02c6cf63 d0b6c854
...@@ -1156,7 +1156,12 @@ Event_timed::execute(THD *thd, MEM_ROOT *mem_root) ...@@ -1156,7 +1156,12 @@ Event_timed::execute(THD *thd, MEM_ROOT *mem_root)
goto done; goto done;
/* Now we are sure we have valid this->sphead so we can copy the context */ /* Now we are sure we have valid this->sphead so we can copy the context */
sphead->m_security_ctx= security_ctx; sphead->m_security_ctx= security_ctx;
thd->db= dbname.str; /*
THD::~THD will clean this or if there is DROP DATABASE in the SP then
it will be free there. It should not point to our buffer which is allocated
on a mem_root.
*/
thd->db= my_strdup(dbname.str, MYF(0));
thd->db_length= dbname.length; thd->db_length= dbname.length;
if (!check_access(thd, EVENT_ACL,dbname.str, 0, 0, 0,is_schema_db(dbname.str))) if (!check_access(thd, EVENT_ACL,dbname.str, 0, 0, 0,is_schema_db(dbname.str)))
{ {
...@@ -1175,7 +1180,6 @@ Event_timed::execute(THD *thd, MEM_ROOT *mem_root) ...@@ -1175,7 +1180,6 @@ Event_timed::execute(THD *thd, MEM_ROOT *mem_root)
restore_security_context(thd, save_ctx); restore_security_context(thd, save_ctx);
DBUG_PRINT("info", ("master_access=%d db_access=%d", DBUG_PRINT("info", ("master_access=%d db_access=%d",
thd->security_ctx->master_access, thd->security_ctx->db_access)); thd->security_ctx->master_access, thd->security_ctx->db_access));
thd->db= 0;
VOID(pthread_mutex_lock(&this->LOCK_running)); VOID(pthread_mutex_lock(&this->LOCK_running));
running= false; running= false;
...@@ -1238,12 +1242,12 @@ Event_timed::change_security_context(THD *thd, Security_context *s_ctx, ...@@ -1238,12 +1242,12 @@ Event_timed::change_security_context(THD *thd, Security_context *s_ctx,
Event_timed::restore_security_context() Event_timed::restore_security_context()
thd - thread thd - thread
backup - switch to this context backup - switch to this context
*/ */
void void
Event_timed::restore_security_context(THD *thd, Security_context *backup) Event_timed::restore_security_context(THD *thd, Security_context *backup)
{ {
DBUG_ENTER("Event_timed::change_security_context"); DBUG_ENTER("Event_timed::restore_security_context");
#ifndef NO_EMBEDDED_ACCESS_CHECKS #ifndef NO_EMBEDDED_ACCESS_CHECKS
if (backup) if (backup)
thd->security_ctx= backup; thd->security_ctx= backup;
...@@ -1491,7 +1495,6 @@ Event_timed::spawn_thread_finish(THD *thd) ...@@ -1491,7 +1495,6 @@ Event_timed::spawn_thread_finish(THD *thd)
1 - not locked by this thread 1 - not locked by this thread
*/ */
int int
Event_timed::spawn_unlock(THD *thd) Event_timed::spawn_unlock(THD *thd)
{ {
......
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