nginx/src/os/unix/ngx_time.c
2002-12-15 21:08:04 +00:00

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