diff options
author | unknown <andrey@lmy004.> | 2006-03-16 13:14:40 +0100 |
---|---|---|
committer | unknown <andrey@lmy004.> | 2006-03-16 13:14:40 +0100 |
commit | 06dd976419b982f6ee8bf044c1114b30670e1698 (patch) | |
tree | ac4adde9d6982bfc3a9ef73f04804de1e4dc7fe6 /sql/event.h | |
parent | 28109fed62ef78e035ecb90cc191597a7b2bb1d5 (diff) | |
download | mariadb-git-06dd976419b982f6ee8bf044c1114b30670e1698.tar.gz |
fix for bug 16408 (Events: crash for an event in a procedure)
(one patch)
mysql-test/r/events_bugs.result:
fix for bug 16408
mysql-test/t/events_bugs.test:
fix for bug 16408
sql/event.h:
fix for bug 16408
sql/event_timed.cc:
fix for bug 16408
sql/sql_parse.cc:
fix for bug 16408
sql/sql_yacc.yy:
fix for bug 16408
Diffstat (limited to 'sql/event.h')
-rw-r--r-- | sql/event.h | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/sql/event.h b/sql/event.h index d070f93c575..27de8b46e32 100644 --- a/sql/event.h +++ b/sql/event.h @@ -40,7 +40,6 @@ #define EVENT_EXEC_NO_MORE (1L << 0) #define EVENT_NOT_USED (1L << 1) - extern ulong opt_event_executor; enum enum_event_on_completion @@ -122,6 +121,39 @@ public: bool free_sphead_on_delete; uint flags;//all kind of purposes + static void *operator new(size_t size) + { + void *p; + DBUG_ENTER("Event_timed::new(size)"); + p= my_malloc(size, MYF(0)); + DBUG_PRINT("info", ("alloc_ptr=0x%lx", p)); + DBUG_RETURN(p); + } + + static void *operator new(size_t size, MEM_ROOT *mem_root) + { return (void*) alloc_root(mem_root, (uint) size); } + + static void operator delete(void *ptr, size_t size) + { + DBUG_ENTER("Event_timed::delete(ptr,size)"); + DBUG_PRINT("enter", ("free_ptr=0x%lx", ptr)); + TRASH(ptr, size); + my_free((gptr) ptr, MYF(0)); + DBUG_VOID_RETURN; + } + + static void operator delete(void *ptr, MEM_ROOT *mem_root) + { + /* + Don't free the memory it will be done by the mem_root but + we need to call the destructor because we free other resources + which are not allocated on the root but on the heap, or we + deinit mutexes. + */ + DBUG_ASSERT(0); + } + + Event_timed():in_spawned_thread(0),locked_by_thread_id(0), running(0), status_changed(false), last_executed_changed(false), expression(0), created(0), @@ -136,15 +168,21 @@ public: } ~Event_timed() - { - pthread_mutex_destroy(&this->LOCK_running); + { + deinit_mutexes(); + if (free_sphead_on_delete) - free_sp(); + free_sp(); } - void init(); + + void + deinit_mutexes() + { + pthread_mutex_destroy(&this->LOCK_running); + } int init_definer(THD *thd); |