Creating an EVENT to be executed at a time close to the end of the allowed
range (2038.01.19 03:14:07 UTC) would cause the server to crash. The
expected behavior is to accept all calendar times within the interval and
reject all other values without crashing.
This patch replaces the function 'sec_to_epoch_TIME' with a Time_zone API call.
This function was broken because it invoked the internal function 'sec_to_epoch'
without respecting the restrictions on the function parameters (and this caused
assertion failure). It also was used as a reverse function to
Time_zone_utc::gmt_sec_to_TIME which it isn't.
mysql-test/r/events_bugs.result:
Added test case
mysql-test/t/events_bugs.test:
Added test case
sql/event_data_objects.cc:
Replaced function 'sec_since_epoch_TIME' since it was implemented as
a wrapper around 'sec_since_epoch' without taking parameter restrictions
into account. The function was used to load information about event
execution time from mysql.events table. Further more, the function wasn't
the inverse function of Time_zone_utc::gmt_sec_to_TIME() which was used
by events code to store information about event execution time.
sql/event_db_repository.cc:
Replaced my_tz_UTC object with my_tz_OFFSET0 object because the first one
doesn't supply us with a bijective MYSQL_TIME<->my_time_t translation. Instead
the function sec_since_epoch_TIME was used as a reverse function to the method
my_tz_UTC::gmt_sec_to_TIME.
sql/event_queue.cc:
Replaced my_tz_UTC object with my_tz_OFFSET0 object because the first one
doesn't supply us with a bijective MYSQL_TIME<->my_time_t translation. Instead
the function sec_since_epoch_TIME was used as a reverse function to the method
my_tz_UTC::gmt_sec_to_TIME.
sql/tztime.cc:
* Remove function 'sec_since_epoch_TIME' since it was implemented as
a wrapper around 'sec_since_epoch' without taking parameter restrictions
into account. The function was used to load information about event
execution time from mysql.events table. Further more, the function wasn't
the inverse function of Time_zone_utc::gmt_sec_to_TIME() which was used
by events code to store information about event execution time.
* Added static Time_zone object for UTC+0 time zone.
sql/tztime.h:
Include extern pointer to static Time_zone object.
Changed the default location of the log output to LOG_FILE,
for backward compatibility with MySQL 5.0
mysql-test/r/log_state.result:
Changed the default location of the log output to LOG_FILE,
for backward compatibility with MySQL 5.0
sql/set_var.cc:
Changed the default location of the log output to LOG_FILE,
for backward compatibility with MySQL 5.0
into bodhi.(none):/opt/local/work/mysql-5.1-runtime
mysql-test/r/create.result:
Auto merged
mysql-test/r/innodb.result:
Auto merged
mysql-test/t/create.test:
Auto merged
mysql-test/t/innodb.test:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
Auto merged
into mysql.com:/home/kent/bk/tmp3/mysql-5.1-build
libmysql/libmysql.c:
Auto merged
scripts/make_binary_distribution.sh:
Auto merged
sql/field.cc:
Auto merged
into gleb.loc:/home/uchum/work/bk/5.1-opt
mysql-test/t/disabled.def:
Auto merged
sql/set_var.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
SCCS merged
tests/mysql_client_test.c:
SCCS merged
into gleb.loc:/home/uchum/work/bk/5.1-opt
mysql-test/r/func_gconcat.result:
Auto merged
mysql-test/t/func_gconcat.test:
Auto merged
sql/item_sum.cc:
Auto merged
The Item_date_typecast::val_int function doesn't reset null_value flag.
This makes all values that follows the first null value to be treated as nulls
and led to a wrong result.
Now the Item_date_typecast::val_int function correctly sets the null_value flag
for both null and non-null values.
mysql-test/t/cast.test:
Added a test case for the bug#29898: Item_date_typecast::val_int doesn't reset
the null_value flag.
mysql-test/r/cast.result:
Added a test case for the bug#29898: Item_date_typecast::val_int doesn't reset
the null_value flag.
sql/item_timefunc.cc:
Bug#29898: Item_date_typecast::val_int doesn't reset the null_value flag.
Now the Item_date_typecast::val_int function correctly sets the null_value flag
for both null and non-null values.
a temporary table.
The result string of the Item_func_group_concat wasn't initialized in the
copying constructor of the Item_func_group_concat class. This led to a
wrong charset of GROUP_CONCAT result when the select employs a temporary
table.
The copying constructor of the Item_func_group_concat class now correctly
initializes the charset of the result string.
mysql-test/t/func_gconcat.test:
Added a test case for the bug#29850: Wrong charset of the GROUP_CONCAT result
when the select employs a temporary table.
mysql-test/r/func_gconcat.result:
Added a test case for the bug#29850: Wrong charset of the GROUP_CONCAT result
when the select employs a temporary table.
sql/item_sum.cc:
Bug#29850: Wrong charset of GROUP_CONCAT result when the select employs
a temporary table.
The copying constructor of the Item_func_group_concat class now correctly
initializes the charset of the result string.
into bodhi.(none):/opt/local/work/mysql-5.1-runtime
mysql-test/r/sp-prelocking.result:
Auto merged
mysql-test/r/trigger.result:
Auto merged
mysql-test/t/create.test:
Auto merged
mysql-test/t/innodb.test:
Auto merged
mysql-test/t/sp-prelocking.test:
Auto merged
mysql-test/t/trigger.test:
Auto merged
sql/sql_class.h:
Auto merged
mysql-test/r/create.result:
Use local.
mysql-test/r/innodb.result:
Manual merge.
No test case, since the bug requires a stress case with 30 INSERT DELAYED
threads and 1 killer thread to repeat. The patch is verified
manually.
Review fixes.
The server that is running DELAYED inserts would deadlock itself
or crash under high load if some of the delayed threads were KILLed
in the meanwhile.
The fix is to change internal lock acquisition order of delayed inserts
subsystem and to ensure that
Delayed_insert::table_list::db does not point to volatile memory in some
cases.
For details, please see a comment for sql_insert.cc.
sql/sql_insert.cc:
A fix for Bug#29431 killing an insert delayed thread causes crash
1) The deadlock was caused by different lock acquisition order
between delayed_get_table and handle_delayed_insert.
delayed_get_table would:
- acquire LOCK_delayed_create
- create a new Delayed_insert instance
- acquire instance mutex (di->mutex)
- "lock the instance in memory" by
increasing di->locked_in_memory variable
- start the delayed thread
- release di->mutex
- let the delayed thread open the delayed table
- discover that the delayed thread was killed
- try to unlock() the delayed insert instance in memory
- in Delayed_insert::unlock() do
* lock LOCK_delayed_insert
* decrease locks_in_memory and discover it's 0
* attempt to lock di->mutex to broadcast di->cond condition <-- deadlock
here
Meanwhile, the delayed thread would
* lock di->mutex
* open the table
* get killed
* not notice that and attempt to lock LOCK_delayed_insert
to register itself in the delayed insert list <-- deadlock here.
Simply put, delayed_get_table used to lock LOCK_delayed_insert and then
di->mutex, and handle_delayed_insert would lock di->mutex and then
LOCK_delayed_insert.
Fixed by moving registration in the list of delayed insert threads from
handle_delayed_insert to delayed_get_table - so that now
handle_delayed_insert doesn't need to acquire LOCK_delayed_insert mutex.
2) di->table_list.db was copied by-pointer from table_list.db of the first
producer -- the one who initiated creation of the delayed insert thread.
This producer might be long gone when the member is needed
(handle_delayed_insert:open_ltable),
e.g. by having been killed with KILL CONNECTION statement.
Fixed by using a pointer to the consumer's deep copy of THD::db.
3) In find_handler, we shouldn't assume that Delayed_insert object
already (or still) has a table opened all the time it is
present in the delayed insert list. E.g. it's not the case
when Delayed_insert decided to terminate, closed the table, but haven't
yet unregistered from the list (see the end of handle_delayed_insert).
into gleb.loc:/home/uchum/work/bk/5.1-opt
client/mysqldump.c:
Auto merged
include/my_base.h:
Auto merged
mysql-test/include/mix1.inc:
Auto merged
mysql-test/r/innodb_mysql.result:
Auto merged
mysql-test/t/disabled.def:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_table.cc:
Auto merged
sql/sql_update.cc:
Auto merged
storage/myisam/ha_myisam.cc:
Auto merged
into trift-lap.none:/MySQL/M51/bug14151-5.1
BitKeeper/deleted/.del-MySQL-Source.icc~edded3c3a5cf83b1:
Auto merged
BitKeeper/deleted/.del-mysqlmanager-pwgen.c~d8f5f91ec54432b9:
Auto merged
BitKeeper/deleted/.del-mysqlmanager.c~e97636d71145a0b:
Auto merged
include/Makefile.am:
Auto merged
sql/item_strfunc.cc:
Auto merged
sql/table.cc:
Auto merged
into magare.gmz:/home/kgeorge/mysql/work/merge-5.0-5.1-opt
mysql-test/r/type_time.result:
Auto merged
sql/field.cc:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
BitKeeper/deleted/.del-index_merge.result:
Auto merged
mysql-test/include/index_merge1.inc:
Auto merged
sql/item_cmpfunc.h:
Auto merged
sql/opt_range.cc:
Auto merged
storage/heap/ha_heap.cc:
Auto merged
storage/heap/ha_heap.h:
Auto merged
Fix the typo in the constructor. Cover a semantic check that previously
never worked with a test.
mysql-test/r/create.result:
Update results (Bug#26104)
mysql-test/r/innodb.result:
Update results.
mysql-test/t/create.test:
Add a test case for Bug#26104 Bug on foreign key class constructor
mysql-test/t/innodb.test:
Return a new error number (MySQL error instead of internal InnoDB error).
sql/sql_class.h:
A fix for Bug#26104 Bug on foreign key class constructor -- fix
the typo in the constructor
into ramayana.hindu.god:/home/tsmith/m/bk/maint/51
mysql-test/suite/rpl_ndb/t/disabled.def:
Auto merged
mysql-test/t/disabled.def:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
Auto merged
'/' and '\' in path delimiters:
- Fix this by creating new handler with exactly the same path line as
was passed to ha_create/ha_open.
sql/opt_range.cc:
Set thd->net.report_error on handler::clone() failure
into bodhi.(none):/opt/local/work/mysql-5.1-runtime
mysql-test/r/events_bugs.result:
Auto merged
mysql-test/r/show_check.result:
Auto merged
mysql-test/r/sp.result:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/share/errmsg.txt:
Auto merged
mysql-test/r/innodb_mysql.result:
Update test results (merge from the main tree).
mysql-test/r/query_cache.result:
Update test results (merge from the main tree).
mysql-test/r/sp.result:
Update test results (merge from the main tree).
mysql-test/t/query_cache.test:
Use --echo End of to simplify future merges.
sql/handler.h:
st_table_list -> TABLE_LIST
sql/item_create.cc:
A post-merge fix (this code is in sql_yacc.yy in 5.0)
sql/rpl_utility.h:
st_table_list -> TABLE_LIST
sql/sp.cc:
A post-merge fix.
sql/sp_head.cc:
In 5.1 memdup_root returns void*.
sql/sql_show.cc:
st_table_list -> TABLE_LIST
sql/sql_show.h:
st_table_list -> TABLE_LIST
sql/sql_yacc.yy:
A post-merge fix.
sql/table.cc:
st_table_list -> TABLE_LIST
sql/table.h:
st_table_list -> TABLE_LIST