From: Jon Olav Hauglid Date: August 26 2010 8:28am Subject: bzr commit into mysql-5.5-runtime branch (jon.hauglid:3122) Bug#44171 List-Archive: http://lists.mysql.com/commits/116833 X-Bug: 44171 Message-Id: <201008260831.o7Q1BH0p027489@rcsinet13.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============9206690049146222903==" --===============9206690049146222903== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-5.5-runtime-bug44171/ based on revid:jon.hauglid@stripped 3122 Jon Olav Hauglid 2010-08-26 Bug #44171 KILL ALTER EVENT can crash the server This assert could be triggered if ALTER EVENT failed to load the event after altering it. Failing to load the event could for example happen because of KILL QUERY. The assert tested that the result of a failed load_named_event() was OP_LOAD_ERROR. However since load_named_event() returns bool, this assert did not make any sense. This patch therefore removes the assert, fixing the problem. The patch also removes enum_events_error_code since it was unused. Test case added to events_sync.test. added: mysql-test/r/events_sync.result mysql-test/t/events_sync-master.opt mysql-test/t/events_sync.test modified: sql/events.cc sql/events.h === added file 'mysql-test/r/events_sync.result' --- a/mysql-test/r/events_sync.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/r/events_sync.result 2010-08-26 08:28:57 +0000 @@ -0,0 +1,19 @@ +# +# Bug#44171 KILL ALTER EVENT can crash the server +# +DROP EVENT IF EXISTS e1; +# Connection con1 +CREATE EVENT e1 +ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY +DO INSERT INTO t1 VALUES (1); +SET DEBUG_SYNC= 'before_update_event_load SIGNAL waiting WAIT_FOR killed'; +# Sending: +ALTER EVENT e1 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 DAY; +# Connection default +SET DEBUG_SYNC='now WAIT_FOR waiting'; +SET DEBUG_SYNC= 'now SIGNAL killed'; +# Connection con1 +ERROR 70100: Query execution was interrupted +# Connection default +DROP EVENT e1; +SET DEBUG_SYNC= 'RESET'; === added file 'mysql-test/t/events_sync-master.opt' --- a/mysql-test/t/events_sync-master.opt 1970-01-01 00:00:00 +0000 +++ b/mysql-test/t/events_sync-master.opt 2010-08-26 08:28:57 +0000 @@ -0,0 +1 @@ +--event-scheduler === added file 'mysql-test/t/events_sync.test' --- a/mysql-test/t/events_sync.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/t/events_sync.test 2010-08-26 08:28:57 +0000 @@ -0,0 +1,57 @@ +# +# Event tests that require sync points +# +--source include/have_debug_sync.inc +--source include/not_embedded.inc + +# Check that the event_scheduler is really running +--source include/running_event_scheduler.inc + +# Save the initial number of concurrent sessions. +--source include/count_sessions.inc + + +--echo # +--echo # Bug#44171 KILL ALTER EVENT can crash the server +--echo # + +--disable_warnings +DROP EVENT IF EXISTS e1; +--enable_warnings + +--echo # Connection con1 +connect (con1, localhost, root); +let $connection_id= `SELECT CONNECTION_ID()`; + +CREATE EVENT e1 + ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY + DO INSERT INTO t1 VALUES (1); + +SET DEBUG_SYNC= 'before_update_event_load SIGNAL waiting WAIT_FOR killed'; +--echo # Sending: +--send ALTER EVENT e1 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 DAY + +--echo # Connection default +connection default; +SET DEBUG_SYNC='now WAIT_FOR waiting'; +# kill the query that is waiting +--disable_query_log +--eval KILL QUERY $connection_id +--enable_query_log +SET DEBUG_SYNC= 'now SIGNAL killed'; + +--echo # Connection con1 +connection con1; +--error ER_QUERY_INTERRUPTED +--reap + +--echo # Connection default +connection default; +DROP EVENT e1; +SET DEBUG_SYNC= 'RESET'; +disconnect con1; + + +# Check that all connections opened by test cases in this file are really +# gone so execution of other tests won't be affected by their presence. +--source include/wait_until_count_sessions.inc === modified file 'sql/events.cc' --- a/sql/events.cc 2010-08-18 11:29:04 +0000 +++ b/sql/events.cc 2010-08-26 08:28:57 +0000 @@ -30,6 +30,7 @@ #include "event_scheduler.h" #include "sp_head.h" // for Stored_program_creation_ctx #include "set_var.h" +#include "debug_sync.h" /** @addtogroup Event_Scheduler @@ -480,15 +481,13 @@ Events::update_event(THD *thd, Event_par { LEX_STRING dbname= new_dbname ? *new_dbname : parse_data->dbname; LEX_STRING name= new_name ? *new_name : parse_data->name; + DEBUG_SYNC(thd, "before_update_event_load"); if (!(new_element= new Event_queue_element())) ret= TRUE; // OOM else if ((ret= db_repository->load_named_event(thd, dbname, name, new_element))) - { - DBUG_ASSERT(ret == OP_LOAD_ERROR); delete new_element; - } else { /* === modified file 'sql/events.h' --- a/sql/events.h 2010-08-05 12:34:19 +0000 +++ b/sql/events.h 2010-08-26 08:28:57 +0000 @@ -44,19 +44,6 @@ class THD; typedef class Item COND; typedef struct charset_info_st CHARSET_INFO; -/* Return codes */ -enum enum_events_error_code -{ - OP_OK= 0, - OP_NOT_RUNNING, - OP_CANT_KILL, - OP_CANT_INIT, - OP_DISABLED_EVENT, - OP_LOAD_ERROR, - OP_ALREADY_EXISTS -}; - - int sortcmp_lex_string(LEX_STRING s, LEX_STRING t, CHARSET_INFO *cs); --===============9206690049146222903== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jon.hauglid@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jon.hauglid@stripped # target_branch: file:///export/home/x/mysql-5.5-runtime-bug44171/ # testament_sha1: ab259876c6fe2543e82a334d8d72ab4caf2abc6d # timestamp: 2010-08-26 10:29:01 +0200 # source_branch: file:///export/home/x/mysql-5.5-bugfixing/ # base_revision_id: jon.hauglid@stripped\ # ht5xye4dptoeuuq3 # # Begin bundle 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 LjA= --===============9206690049146222903==--