1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-07 00:04:31 +03:00

An attempt to fix a sporadic valgrind memory leak in Event Scheduler:

streamline the event worker thread work flow and try to eliminate
possibilities for memory corruptions that might have been
lurking in previous (complicated) code.
This patch: 
 * removes Event_job_data::compile that was never used
 * cleans up Event_job_data::execute to minimize juggling with
   thread context and eliminate unneded code paths
 * Implements Security_context::change/restore_security_context
   to be able to re-use these methods in all stored programs
This is to maybe fix Bug#27733 "Valgrind failures in 
remove_table_from_cache".
Review comments applied.


sql/event_data_objects.cc:
  Remove Event_job_data::compile, which was never used without
  Event_job_data::execute().
  Merge the implementation of compile() with Event_job_data::execute().
  Reuse existing functions to prepare the event worker thread
  for execution instead of some previously copy-pasted code.
  Do not change and restore the current database inside 
  Event_job_data::execute(), just set the current database in the 
  thread, that is enough to parse and execute an event.
sql/event_data_objects.h:
  Update declarations.
sql/event_scheduler.cc:
  Allocate Event_job_data on stack.
sql/item_func.cc:
  Update to match the new declaration of restore_security_context()
sql/sp_head.cc:
  Update to match the new declaration of 
  change/restore_security_context()
sql/sql_class.cc:
  Move change/restore_security_context to class Security_context.
  Add more comments.
sql/sql_class.h:
  Make change/restore_security_context methods of Security_context.
  That allows us to reuse them in Event Scheduler (instead of a
  copy-paste presently used there).
sql/sql_trigger.cc:
  Update to match the new declaration of 
  change/restore_security_context()
This commit is contained in:
unknown
2007-04-13 16:35:56 -04:00
parent d4744eb9dd
commit c1b6e128cc
8 changed files with 306 additions and 369 deletions

View File

@@ -1543,9 +1543,15 @@ bool Table_triggers_list::process_triggers(THD *thd, trg_event_type event,
old_field= trigger_table->field;
}
#ifndef NO_EMBEDDED_ACCESS_CHECKS
Security_context *sctx= &sp_trigger->m_security_ctx;
Security_context *save_ctx;
if (sp_change_security_context(thd, sp_trigger, &save_ctx))
if (sctx->change_security_context(thd,
&sp_trigger->m_definer_user,
&sp_trigger->m_definer_host,
&sp_trigger->m_db,
&save_ctx))
return TRUE;
/*
@@ -1570,7 +1576,7 @@ bool Table_triggers_list::process_triggers(THD *thd, trg_event_type event,
thd->security_ctx->priv_user, thd->security_ctx->host_or_ip,
trigger_table->s->table_name.str);
sp_restore_security_context(thd, save_ctx);
sctx->restore_security_context(thd, save_ctx);
return TRUE;
}
#endif // NO_EMBEDDED_ACCESS_CHECKS
@@ -1582,7 +1588,7 @@ bool Table_triggers_list::process_triggers(THD *thd, trg_event_type event,
thd->restore_sub_statement_state(&statement_state);
#ifndef NO_EMBEDDED_ACCESS_CHECKS
sp_restore_security_context(thd, save_ctx);
sctx->restore_security_context(thd, save_ctx);
#endif // NO_EMBEDDED_ACCESS_CHECKS
}