mirror of
https://github.com/nginx/nginx.git
synced 2024-12-25 00:20:42 -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;
|
u_char *lock_file;
|
||||||
ngx_uint_t i, n;
|
ngx_uint_t i, n;
|
||||||
ngx_log_t *log;
|
ngx_log_t *log;
|
||||||
|
ngx_time_t *tp;
|
||||||
ngx_conf_t conf;
|
ngx_conf_t conf;
|
||||||
ngx_pool_t *pool;
|
ngx_pool_t *pool;
|
||||||
ngx_cycle_t *cycle, **old;
|
ngx_cycle_t *cycle, **old;
|
||||||
@ -59,6 +60,16 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
|||||||
ngx_core_module_t *module;
|
ngx_core_module_t *module;
|
||||||
char hostname[NGX_MAXHOSTNAMELEN];
|
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;
|
log = old_cycle->log;
|
||||||
|
|
||||||
pool = ngx_create_pool(NGX_CYCLE_POOL_SIZE, log);
|
pool = ngx_create_pool(NGX_CYCLE_POOL_SIZE, log);
|
||||||
|
@ -50,10 +50,6 @@ ngx_time_init(void)
|
|||||||
|
|
||||||
ngx_cached_time = &cached_time[0];
|
ngx_cached_time = &cached_time[0];
|
||||||
|
|
||||||
#if !(NGX_WIN32)
|
|
||||||
tzset();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ngx_time_update(0, 0);
|
ngx_time_update(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,50 @@
|
|||||||
#include <ngx_core.h>
|
#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
|
void
|
||||||
ngx_localtime(time_t s, ngx_tm_t *tm)
|
ngx_localtime(time_t s, ngx_tm_t *tm)
|
||||||
{
|
{
|
||||||
|
@ -52,6 +52,7 @@ typedef struct tm ngx_tm_t;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
void ngx_timezone_update(void);
|
||||||
void ngx_localtime(time_t s, ngx_tm_t *tm);
|
void ngx_localtime(time_t s, ngx_tm_t *tm);
|
||||||
void ngx_libc_localtime(time_t s, struct tm *tm);
|
void ngx_libc_localtime(time_t s, struct tm *tm);
|
||||||
void ngx_libc_gmtime(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_HAVE_GETTIMEZONE 1
|
||||||
|
|
||||||
|
#define ngx_timezone_update()
|
||||||
|
|
||||||
ngx_int_t ngx_gettimezone(void);
|
ngx_int_t ngx_gettimezone(void);
|
||||||
void ngx_libc_localtime(time_t s, struct tm *tm);
|
void ngx_libc_localtime(time_t s, struct tm *tm);
|
||||||
void ngx_libc_gmtime(time_t s, struct tm *tm);
|
void ngx_libc_gmtime(time_t s, struct tm *tm);
|
||||||
|
Loading…
Reference in New Issue
Block a user