Bug#26807 "set global event_scheduler=1" and --skip-grant-tables crashes server

- Crash occured because Event engine is only initialized if
  ACLs are used but not properly marked as disabled.
- The patch is to mark the Event engine as DISABLED if no ACLs
  are used to avoid access of uninitialized variables.


mysql-test/r/skip_grants.result:
  Added test case
mysql-test/t/skip_grants.test:
  Added test case
This commit is contained in:
unknown 2007-03-16 14:57:02 +01:00
parent 469282461c
commit 2b2fb67460
4 changed files with 15 additions and 1 deletions

View file

@ -58,3 +58,5 @@ DROP PROCEDURE p3;
DROP FUNCTION f1;
DROP FUNCTION f2;
DROP FUNCTION f3;
set global event_scheduler=1;
ERROR HY000: The MySQL server is running with the --event-scheduler=DISABLED or --skip-grant-tables option so it cannot execute this statement

View file

@ -108,3 +108,10 @@ DROP PROCEDURE p3;
DROP FUNCTION f1;
DROP FUNCTION f2;
DROP FUNCTION f3;
#
# Bug #26807 "set global event_scheduler=1" and --skip-grant-tables crashes server
#
--error ER_OPTION_PREVENTS_STATEMENT
set global event_scheduler=1;

View file

@ -3691,6 +3691,7 @@ we force server id to 2, but this MySQL server will not act as a slave.");
udf_init();
#endif
}
init_status_vars();
if (opt_bootstrap) /* If running with bootstrap, do not start replication. */
opt_skip_slave_start= 1;
@ -3737,6 +3738,10 @@ we force server id to 2, but this MySQL server will not act as a slave.");
if (Events::get_instance()->init())
unireg_abort(1);
}
else
{
Events::opt_event_scheduler = Events::EVENTS_DISABLED;
}
/* Signal threads waiting for server to be started */
pthread_mutex_lock(&LOCK_server_started);

View file

@ -3990,7 +3990,7 @@ sys_var_event_scheduler::update(THD *thd, set_var *var)
DBUG_ENTER("sys_var_event_scheduler::update");
if (Events::opt_event_scheduler == Events::EVENTS_DISABLED)
{
my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--event-scheduler=DISABLED");
my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--event-scheduler=DISABLED or --skip-grant-tables");
DBUG_RETURN(TRUE);
}