mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Merge tulin@bk-internal.mysql.com:/home/bk/mysql-5.1
into whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-single-user
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
# Can't test with embedded server that doesn't support grants
|
# Can't test with embedded server that doesn't support grants
|
||||||
-- source include/not_embedded.inc
|
-- source include/not_embedded.inc
|
||||||
-- source include/not_valgrind.inc
|
|
||||||
|
|
||||||
CREATE DATABASE IF NOT EXISTS events_test;
|
CREATE DATABASE IF NOT EXISTS events_test;
|
||||||
USE events_test;
|
USE events_test;
|
||||||
|
@@ -154,8 +154,6 @@ deinit_event_thread(THD *thd)
|
|||||||
thread_running--;
|
thread_running--;
|
||||||
delete thd;
|
delete thd;
|
||||||
pthread_mutex_unlock(&LOCK_thread_count);
|
pthread_mutex_unlock(&LOCK_thread_count);
|
||||||
|
|
||||||
my_thread_end();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -231,8 +229,7 @@ event_scheduler_thread(void *arg)
|
|||||||
if (!res)
|
if (!res)
|
||||||
scheduler->run(thd);
|
scheduler->run(thd);
|
||||||
|
|
||||||
deinit_event_thread(thd);
|
my_thread_end();
|
||||||
pthread_exit(0);
|
|
||||||
DBUG_RETURN(0); // Against gcc warnings
|
DBUG_RETURN(0); // Against gcc warnings
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,6 +257,7 @@ event_worker_thread(void *arg)
|
|||||||
Event_worker_thread worker_thread;
|
Event_worker_thread worker_thread;
|
||||||
worker_thread.run(thd, event);
|
worker_thread.run(thd, event);
|
||||||
|
|
||||||
|
my_thread_end();
|
||||||
return 0; // Can't return anything here
|
return 0; // Can't return anything here
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -494,12 +492,14 @@ Event_scheduler::run(THD *thd)
|
|||||||
}
|
}
|
||||||
DBUG_PRINT("info", ("state=%s", scheduler_states_names[state].str));
|
DBUG_PRINT("info", ("state=%s", scheduler_states_names[state].str));
|
||||||
}
|
}
|
||||||
|
|
||||||
LOCK_DATA();
|
LOCK_DATA();
|
||||||
DBUG_PRINT("info", ("Signalling back to the stopper COND_state"));
|
deinit_event_thread(thd);
|
||||||
|
scheduler_thd= NULL;
|
||||||
state= INITIALIZED;
|
state= INITIALIZED;
|
||||||
|
DBUG_PRINT("info", ("Signalling back to the stopper COND_state"));
|
||||||
pthread_cond_signal(&COND_state);
|
pthread_cond_signal(&COND_state);
|
||||||
UNLOCK_DATA();
|
UNLOCK_DATA();
|
||||||
sql_print_information("Event Scheduler: Stopped");
|
|
||||||
|
|
||||||
DBUG_RETURN(res);
|
DBUG_RETURN(res);
|
||||||
}
|
}
|
||||||
@@ -651,17 +651,7 @@ Event_scheduler::stop()
|
|||||||
COND_STATE_WAIT(thd, NULL, "Waiting scheduler to stop");
|
COND_STATE_WAIT(thd, NULL, "Waiting scheduler to stop");
|
||||||
} while (state == STOPPING);
|
} while (state == STOPPING);
|
||||||
DBUG_PRINT("info", ("Scheduler thread has cleaned up. Set state to INIT"));
|
DBUG_PRINT("info", ("Scheduler thread has cleaned up. Set state to INIT"));
|
||||||
/*
|
sql_print_information("Event Scheduler: Stopped");
|
||||||
The rationale behind setting it to NULL here but not destructing it
|
|
||||||
beforehand is because the THD will be deinited in event_scheduler_thread().
|
|
||||||
It's more clear when the post_init and the deinit is done in one function.
|
|
||||||
Here we just mark that the scheduler doesn't have a THD anymore. Though for
|
|
||||||
milliseconds the old thread could exist we can't use it anymore. When we
|
|
||||||
unlock the mutex in this function a little later the state will be
|
|
||||||
INITIALIZED. Therefore, a connection thread could enter the critical section
|
|
||||||
and will create a new THD object.
|
|
||||||
*/
|
|
||||||
scheduler_thd= NULL;
|
|
||||||
end:
|
end:
|
||||||
UNLOCK_DATA();
|
UNLOCK_DATA();
|
||||||
DBUG_RETURN(FALSE);
|
DBUG_RETURN(FALSE);
|
||||||
|
@@ -740,7 +740,11 @@ nlist_err:
|
|||||||
TABLE)
|
TABLE)
|
||||||
mem_root MEM_ROOT for parameters allocation
|
mem_root MEM_ROOT for parameters allocation
|
||||||
parameters parameters description
|
parameters parameters description
|
||||||
required number of required parameters in above list
|
required number of parameters in the above list. If the file
|
||||||
|
contains more parameters than "required", they will
|
||||||
|
be ignored. If the file contains less parameters
|
||||||
|
then "required", non-existing parameters will
|
||||||
|
remain their values.
|
||||||
hook hook called for unknown keys
|
hook hook called for unknown keys
|
||||||
hook_data some data specific for the hook
|
hook_data some data specific for the hook
|
||||||
|
|
||||||
@@ -923,6 +927,13 @@ list_err:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
NOTE: if we read less than "required" parameters, it is still Ok.
|
||||||
|
Probably, we've just read the file of the previous version, which
|
||||||
|
contains less parameters.
|
||||||
|
*/
|
||||||
|
|
||||||
DBUG_RETURN(FALSE);
|
DBUG_RETURN(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -992,6 +992,12 @@ sp_head::execute(THD *thd)
|
|||||||
m_first_instance->m_last_cached_sp == this) ||
|
m_first_instance->m_last_cached_sp == this) ||
|
||||||
(m_recursion_level + 1 == m_next_cached_sp->m_recursion_level));
|
(m_recursion_level + 1 == m_next_cached_sp->m_recursion_level));
|
||||||
|
|
||||||
|
/*
|
||||||
|
NOTE: The SQL Standard does not specify the context that should be
|
||||||
|
preserved for stored routines. However, at SAP/Walldorf meeting it was
|
||||||
|
decided that current database should be preserved.
|
||||||
|
*/
|
||||||
|
|
||||||
if (m_db.length &&
|
if (m_db.length &&
|
||||||
(err_status= sp_use_new_db(thd, m_db, &old_db, 0, &dbchanged)))
|
(err_status= sp_use_new_db(thd, m_db, &old_db, 0, &dbchanged)))
|
||||||
goto done;
|
goto done;
|
||||||
|
Reference in New Issue
Block a user