Buggy:
$ dpkg -l | grep tzdata
ii tzdata 2016b-0ubuntu0.12.04 time zone and daylight-saving time data
ii tzdata-java 2016b-0ubuntu0.12.04 time zone and daylight-saving time data for use by java runtimes
$ cat ./bug.c
#include <time.h>
#include <stdio.h>
int main() {
time_t t = time(0);
int i;
struct tm result;
for(i=0; i < 10000000; i++)
localtime_r(&t, &result);
puts(ctime(&t));
return 0;
}
$ gcc ./bug.c
$ time ./a.out
Mon Mar 21 23:56:11 2016
real 0m4.607s
user 0m4.599s
sys 0m0.002s
$
Patched:
$ dpkg -l | grep tzdata
ii tzdata 2016b-0ubuntu0.12.04-yandex1 time zone and daylight-saving time data
ii tzdata-java 2016b-0ubuntu0.12.04-yandex1 time zone and daylight-saving time data for use by java runtimes
$ cat ./bug.c
#include <time.h>
#include <stdio.h>
int main() {
time_t t = time(0);
int i;
struct tm result;
for(i=0; i < 10000000; i++)
localtime_r(&t, &result);
puts(ctime(&t));
return 0;
}
$ gcc ./bug.c
$ time ./a.out
Mon Mar 21 23:58:19 2016
2016b. Long live to the bug!
Buggy: 12.04 time zone and daylight-saving time data 12.04 time zone and daylight-saving time data for use by java runtimes
$ dpkg -l | grep tzdata
ii tzdata 2016b-0ubuntu0.
ii tzdata-java 2016b-0ubuntu0.
$ cat ./bug.c
#include <time.h>
#include <stdio.h>
int main() {
time_t t = time(0);
int i;
struct tm result;
for(i=0; i < 10000000; i++)
localtime_r(&t, &result);
puts(ctime(&t));
return 0;
}
$ gcc ./bug.c
$ time ./a.out
Mon Mar 21 23:56:11 2016
real 0m4.607s
user 0m4.599s
sys 0m0.002s
$
Patched: 12.04-yandex1 time zone and daylight-saving time data 12.04-yandex1 time zone and daylight-saving time data for use by java runtimes
$ dpkg -l | grep tzdata
ii tzdata 2016b-0ubuntu0.
ii tzdata-java 2016b-0ubuntu0.
$ cat ./bug.c
#include <time.h>
#include <stdio.h>
int main() {
time_t t = time(0);
int i;
struct tm result;
for(i=0; i < 10000000; i++)
localtime_r(&t, &result);
puts(ctime(&t));
return 0;
}
$ gcc ./bug.c
$ time ./a.out
Mon Mar 21 23:58:19 2016
real 0m1.296s
user 0m1.292s
sys 0m0.002s
$