diff options
author | unknown <andrey@lmy004.> | 2005-12-13 13:21:11 +0100 |
---|---|---|
committer | unknown <andrey@lmy004.> | 2005-12-13 13:21:11 +0100 |
commit | cd337b34252c0986edf62f240ffe266e92736647 (patch) | |
tree | 55d5de7f678b9e0cfa4ded46fac35264fe530a70 /sql/event.cc | |
parent | 873b3039d6d619fb790929d813bda31e2f7c82d4 (diff) | |
download | mariadb-git-cd337b34252c0986edf62f240ffe266e92736647.tar.gz |
WL#1034 update
cleanup before throwin away DYNAMIC_ARRAY for event storage,
once reallocated I get dangling pointers so that's not good.
solution will be found however ;)
sql/event.cc:
- remove unneeded variables
- remove commented out code
- remove non-cs compliant comment
- fix a bug when removing from memory cache
- better close the tables than relying on sql_parse.cc::do_command()
to do that
sql/event_executor.cc:
- cleanup
sql/event_priv.h:
-cleanup
sql/event_timed.cc:
cleanup
Diffstat (limited to 'sql/event.cc')
-rw-r--r-- | sql/event.cc | 69 |
1 files changed, 11 insertions, 58 deletions
diff --git a/sql/event.cc b/sql/event.cc index 87a846cd2dd..f8bfde44dde 100644 --- a/sql/event.cc +++ b/sql/event.cc @@ -73,17 +73,11 @@ Warning: bool mysql_event_table_exists= 1; DYNAMIC_ARRAY events_array; -DYNAMIC_ARRAY EXEC_QUEUE_DARR_NAME; -QUEUE EXEC_QUEUE_QUEUE_NAME; +QUEUE EVEX_EQ_NAME; MEM_ROOT evex_mem_root; -//extern volatile uint thread_running; -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////// Static functions follow /////////////////////////// -//////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// + void evex_queue_init(EVEX_QUEUE_TYPE *queue) { @@ -202,6 +196,7 @@ my_time_compare(TIME *a, TIME *b) DBUG_RETURN(0); } + int evex_time_diff(TIME *a, TIME *b) { @@ -519,14 +514,17 @@ db_create_event(THD *thd, event_timed *et) mysql_bin_log.write(&qinfo); } - // No need to close the table, it will be closed in sql_parse::do_command if (dbchanged) (void) mysql_change_db(thd, olddb, 1); + if (table) + close_thread_tables(thd); DBUG_RETURN(EVEX_OK); err: if (dbchanged) (void) mysql_change_db(thd, olddb, 1); + if (table) + close_thread_tables(thd); DBUG_RETURN(EVEX_GENERAL_ERROR); } @@ -742,9 +740,7 @@ evex_load_and_compile_event(THD * thd, sp_name *spn, bool use_lock) VOID(push_dynamic(&events_array,(gptr) ett)); ett_copy= dynamic_element(&events_array, events_array.elements - 1, event_timed*); -/** - VOID(push_dynamic(&evex_executing_queue, (gptr) &ett_copy)); -**/ + evex_queue_insert(&EVEX_EQ_NAME, (EVEX_PTOQEL) ett_copy); /* @@ -754,19 +750,6 @@ evex_load_and_compile_event(THD * thd, sp_name *spn, bool use_lock) ett->free_sphead_on_delete= false; delete ett; - /* - We find where the first element resides in the array. And then do a - qsort of events_array.elements (the current number of elements). - We know that the elements are stored in a contiguous block w/o holes. - */ -/** - qsort((gptr) dynamic_element(&evex_executing_queue, 0, event_timed**), - evex_executing_queue.elements, - sizeof(event_timed **), - (qsort_cmp) event_timed_compare); -**/ - evex_queue_sort(&EVEX_EQ_NAME); - if (use_lock) VOID(pthread_mutex_unlock(&LOCK_event_arrays)); @@ -791,40 +774,10 @@ evex_remove_from_cache(LEX_STRING *db, LEX_STRING *name, bool use_lock) if (use_lock) VOID(pthread_mutex_lock(&LOCK_event_arrays)); -/** - for (i= 0; i < evex_executing_queue.elements; ++i) - { - event_timed *et= *dynamic_element(&evex_executing_queue, i, event_timed**); - DBUG_PRINT("info", ("[%s.%s]==[%s.%s]?",db->str,name->str, et->dbname.str, - et->name.str)); - if (!sortcmp_lex_string(*name, et->name, system_charset_info) && - !sortcmp_lex_string(*db, et->dbname, system_charset_info)) - { - int idx= get_index_dynamic(&events_array, (gptr) et); - //we are lucky the event is in the executing queue, no need of second pass - if (idx == -1) - { - //this should never happen - DBUG_PRINT("error", (" get_index_dynamic problem. %d." - "i=%d idx=%d evex_ex_queue.buf=%p evex_ex_queue.elements=%d et=%p\n" - "events_array=%p events_array.elements=%d events_array.buf=%p et=%p\n", - __LINE__, i, idx, &evex_executing_queue.buffer, - evex_executing_queue.elements, et, &events_array, - events_array.elements, events_array.buffer, et)); - DBUG_ASSERT(0); - } - //destruct first and then remove. the destructor will delete sp_head - et->free_sp(); - delete_dynamic_element(&events_array, idx); - delete_dynamic_element(&evex_executing_queue, i); - // ok, we have cleaned - goto done; - } - } -**/ + for (i= 0; i < evex_queue_num_elements(EVEX_EQ_NAME); ++i) { - event_timed *et= *evex_queue_element(&EVEX_EQ_NAME, i, event_timed**); + event_timed *et= evex_queue_element(&EVEX_EQ_NAME, i, event_timed*); DBUG_PRINT("info", ("[%s.%s]==[%s.%s]?",db->str,name->str, et->dbname.str, et->name.str)); if (!sortcmp_lex_string(*name, et->name, system_charset_info) && @@ -834,7 +787,7 @@ evex_remove_from_cache(LEX_STRING *db, LEX_STRING *name, bool use_lock) //we are lucky the event is in the executing queue, no need of second pass //destruct first and then remove. the destructor will delete sp_head et->free_sp(); - evex_queue_delete_element(&EVEX_EQ_NAME, idx); + delete_dynamic_element(&events_array, idx); evex_queue_delete_element(&EVEX_EQ_NAME, i); // ok, we have cleaned goto done; |