1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-01 03:47:19 +03:00

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.
This commit is contained in:
Anson Chung
2024-04-25 17:44:43 +00:00
committed by Sergei Golubchik
parent 84331c5bd7
commit dcbc526a20
5 changed files with 12 additions and 6 deletions

View File

@ -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

View File

@ -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 #

View File

@ -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);

View File

@ -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);

View File

@ -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)));