Commit dcbc526a authored by Anson Chung's avatar Anson Chung Committed by Sergei Golubchik

Alter thr_timer to allow server startup past 2038

In previous commits, changes were made to use the entire 32 bit
unsigned range in order to support timestamps past 2038 on
64 bit systems. Without changing set_max_time on thr_timer to also
match this new range, the server will crash when attempting to
startup past 2038-01-19. Like the previous commits, this only
applies to 64 bit systems.

All new code of the whole pull request, including one or several
files that are either new files or modified ones, are contributed
under the BSD-new license. I am contributing on behalf of my
employer Amazon Web Services, Inc.
parent 84331c5b
......@@ -59,8 +59,8 @@ update t1 set f = 'foo';
select * from t1;
pk f
1 foo
select pk, f, row_end > DATE'2030-01-01' from t1 for system_time all;
pk f row_end > DATE'2030-01-01'
select pk, f, row_end > DATE'2106-01-01' from t1 for system_time all;
pk f row_end > DATE'2106-01-01'
1 foo 1
1 foo 0
1 bar 0
......
......@@ -59,7 +59,7 @@ update t1 set f = 'bar';
select * from t1;
update t1 set f = 'foo';
select * from t1;
select pk, f, row_end > DATE'2030-01-01' from t1 for system_time all;
select pk, f, row_end > DATE'2106-01-01' from t1 for system_time all;
drop table t1;
--echo #
......
......@@ -2734,7 +2734,7 @@ drop table t3|
drop procedure if exists bug6857|
create procedure bug6857()
begin
declare t0, t1 int;
declare t0, t1 bigint;
declare plus bool default 0;
set t0 = unix_timestamp();
select sleep(1.1);
......
......@@ -3365,7 +3365,7 @@ drop procedure if exists bug6857|
--enable_warnings
create procedure bug6857()
begin
declare t0, t1 int;
declare t0, t1 bigint;
declare plus bool default 0;
set t0 = unix_timestamp();
select sleep(1.1);
......
......@@ -35,9 +35,15 @@ static mysql_cond_t COND_timer;
static QUEUE timer_queue;
pthread_t timer_thread;
#if SIZEOF_VOIDP == 4
/* 32 bit system, using old timestamp */
#define set_max_time(abs_time) \
{ (abs_time)->MY_tv_sec= INT_MAX32; (abs_time)->MY_tv_nsec= 0; }
#else
/* 64 bit system. Use 4 byte unsigned timestamp */
#define set_max_time(abs_time) \
{ (abs_time)->MY_tv_sec= UINT_MAX32; (abs_time)->MY_tv_nsec= 0; }
#endif
static void *timer_handler(void *arg __attribute__((unused)));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment