Mercurial > hg > nginx-quic
view src/os/unix/ngx_time.c @ 122:cd91e4a1ad0d
nginx-0.0.1-2003-07-23-17:10:12 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 23 Jul 2003 13:10:12 +0000 |
parents | b48066122884 |
children | a8ff48d26cca |
line wrap: on
line source
#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