mirror of
https://github.com/nginx/nginx.git
synced 2024-12-17 15:17:48 +08:00
89 lines
1.6 KiB
C
89 lines
1.6 KiB
C
|
|
#include <ngx_config.h>
|
|
#include <ngx_time.h>
|
|
|
|
void ngx_localtime(ngx_tm_t *tm)
|
|
{
|
|
time_t clock = time(NULL);
|
|
localtime_r(&clock, tm);
|
|
tm->ngx_tm_mon++;
|
|
tm->ngx_tm_year += 1900;
|
|
}
|
|
|
|
u_int ngx_msec(void)
|
|
{
|
|
struct timeval tv;
|
|
|
|
gettimeofday(&tv, NULL);
|
|
|
|
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
|
|
}
|
|
|
|
|
|
#if 0
|
|
|
|
typedef struct {
|
|
int busy;
|
|
u_int_64 msec;
|
|
time_t sec;
|
|
tm;
|
|
http_time_len;
|
|
http_time[n];
|
|
};
|
|
|
|
volatile *ngx_time_p;
|
|
|
|
ngx_time()
|
|
{
|
|
p = ngx_time_p;
|
|
}
|
|
|
|
ngx_update_time()
|
|
{
|
|
u_int64 msec;
|
|
struct timeval tv;
|
|
|
|
gettimeofday(&tv, NULL);
|
|
|
|
msec = (unsigned long) tv.tv_sec * 1000 + tv.tv_usec / 1000;
|
|
p = ngx_time_p;
|
|
|
|
/* minimum can be for example 0, 10, 50 or 100 ms */
|
|
if (tv_sec > p->sec || msec - p->msec >= minimum) {
|
|
old_p = p;
|
|
/* max_tries < max_slots - 10,
|
|
max_slots should be more than max of threads */
|
|
for (/* void */; i < max_tries; i++) {
|
|
if (++p >= last_slot)
|
|
p = first_slot;
|
|
|
|
if (!test_and_set(p->busy)
|
|
break;
|
|
}
|
|
|
|
if (i == max_tries) {
|
|
ngx_log_error();
|
|
return;
|
|
}
|
|
|
|
if (tv_sec > p->sec) {
|
|
p->sec = tv.tv.sec;
|
|
p->msec = msec;
|
|
localtime_r(&tv.tv_sec, tm);
|
|
make http stirng;
|
|
|
|
} else {
|
|
ngx_memcpy(p->sec, old_p->sec, sizeof() - offset_of(, sec));
|
|
p->msec = msec;
|
|
}
|
|
|
|
/* here can be too seldom and non-critical race condition */
|
|
if (ngx_time_p == old_p)
|
|
ngx_time_p = p;
|
|
|
|
unlock(p->busy);
|
|
}
|
|
}
|
|
|
|
#endif
|