summaryrefslogtreecommitdiff
path: root/sql/event_data_objects.h
diff options
context:
space:
mode:
authorunknown <kostja@vajra.(none)>2007-04-13 16:35:56 -0400
committerunknown <kostja@vajra.(none)>2007-04-13 16:35:56 -0400
commitc1b6e128ccae21cec31bf4f4a60594d0e13a13ea (patch)
tree2e4250999c91bd00cc528ff5cfa90710860bc97f /sql/event_data_objects.h
parentd4744eb9dda6deb09c6c90c8beb0e0390f7ce568 (diff)
downloadmariadb-git-c1b6e128ccae21cec31bf4f4a60594d0e13a13ea.tar.gz
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()
Diffstat (limited to 'sql/event_data_objects.h')
-rw-r--r--sql/event_data_objects.h13
1 files changed, 3 insertions, 10 deletions
diff --git a/sql/event_data_objects.h b/sql/event_data_objects.h
index eb851c98065..2c1dd14aa9e 100644
--- a/sql/event_data_objects.h
+++ b/sql/event_data_objects.h
@@ -17,7 +17,6 @@
#define EVEX_GET_FIELD_FAILED -2
-#define EVEX_COMPILE_ERROR -3
#define EVEX_BAD_PARAMS -5
#define EVEX_MICROSECOND_UNSUP -6
@@ -169,8 +168,6 @@ public:
class Event_job_data : public Event_basic
{
public:
- sp_head *sphead;
-
LEX_STRING body;
LEX_STRING definer_user;
LEX_STRING definer_host;
@@ -178,19 +175,15 @@ public:
ulong sql_mode;
Event_job_data();
- virtual ~Event_job_data();
virtual int
load_from_row(THD *thd, TABLE *table);
- int
+ bool
execute(THD *thd, bool drop);
-
- int
- compile(THD *thd, MEM_ROOT *mem_root);
private:
- int
- get_fake_create_event(String *buf);
+ bool
+ construct_sp_sql(THD *thd, String *sp_sql);
Event_job_data(const Event_job_data &); /* Prevent use of these */
void operator=(Event_job_data &);