mirror of
https://github.com/nginx/nginx.git
synced 2024-12-23 07:33:29 -06:00
ngx_timezone_update()
This commit is contained in:
parent
d76eb9a8c8
commit
fcb5a705dd
@ -47,6 +47,7 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
||||
u_char *lock_file;
|
||||
ngx_uint_t i, n;
|
||||
ngx_log_t *log;
|
||||
ngx_time_t *tp;
|
||||
ngx_conf_t conf;
|
||||
ngx_pool_t *pool;
|
||||
ngx_cycle_t *cycle, **old;
|
||||
@ -59,6 +60,16 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
||||
ngx_core_module_t *module;
|
||||
char hostname[NGX_MAXHOSTNAMELEN];
|
||||
|
||||
ngx_timezone_update();
|
||||
|
||||
/* force localtime update with a new timezone */
|
||||
|
||||
tp = ngx_timeofday();
|
||||
tp->sec = 0;
|
||||
|
||||
ngx_time_update(0, 0);
|
||||
|
||||
|
||||
log = old_cycle->log;
|
||||
|
||||
pool = ngx_create_pool(NGX_CYCLE_POOL_SIZE, log);
|
||||
|
@ -50,10 +50,6 @@ ngx_time_init(void)
|
||||
|
||||
ngx_cached_time = &cached_time[0];
|
||||
|
||||
#if !(NGX_WIN32)
|
||||
tzset();
|
||||
#endif
|
||||
|
||||
ngx_time_update(0, 0);
|
||||
}
|
||||
|
||||
|
@ -8,6 +8,50 @@
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
/*
|
||||
* FreeBSD does not test /etc/localtime change, however, we can workaround it
|
||||
* by calling tzset() with TZ and then without TZ to update timezone.
|
||||
* The trick should work since FreeBSD 2.1.0.
|
||||
*
|
||||
* Linux does not test /etc/localtime change in localtime(),
|
||||
* but may stat("/etc/localtime") several times in every strftime(),
|
||||
* therefore we use it to update timezone.
|
||||
*
|
||||
* Solaris does not test /etc/TIMEZONE change too and no workaround available.
|
||||
*/
|
||||
|
||||
void
|
||||
ngx_timezone_update(void)
|
||||
{
|
||||
#if (NGX_FREEBSD)
|
||||
|
||||
if (getenv("TZ")) {
|
||||
return;
|
||||
}
|
||||
|
||||
putenv("TZ=UTC");
|
||||
|
||||
tzset();
|
||||
|
||||
unsetenv("TZ");
|
||||
|
||||
tzset();
|
||||
|
||||
#elif (NGX_LINUX)
|
||||
time_t s;
|
||||
struct tm *t;
|
||||
char buf[4];
|
||||
|
||||
s = time(0);
|
||||
|
||||
t = localtime(&s);
|
||||
|
||||
strftime(buf, 4, "%H", t);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ngx_localtime(time_t s, ngx_tm_t *tm)
|
||||
{
|
||||
|
@ -52,6 +52,7 @@ typedef struct tm ngx_tm_t;
|
||||
#endif
|
||||
|
||||
|
||||
void ngx_timezone_update(void);
|
||||
void ngx_localtime(time_t s, ngx_tm_t *tm);
|
||||
void ngx_libc_localtime(time_t s, struct tm *tm);
|
||||
void ngx_libc_gmtime(time_t s, struct tm *tm);
|
||||
|
@ -39,6 +39,8 @@ typedef FILETIME ngx_mtime_t;
|
||||
|
||||
#define NGX_HAVE_GETTIMEZONE 1
|
||||
|
||||
#define ngx_timezone_update()
|
||||
|
||||
ngx_int_t ngx_gettimezone(void);
|
||||
void ngx_libc_localtime(time_t s, struct tm *tm);
|
||||
void ngx_libc_gmtime(time_t s, struct tm *tm);
|
||||
|
Loading…
Reference in New Issue
Block a user