Changeset 1654
- Timestamp:
- 07/16/08 18:07:32 (6 months ago)
- Files:
-
- cherokee/trunk/ChangeLog (modified) (1 diff)
- cherokee/trunk/cherokee/Makefile.am (modified) (1 diff)
- cherokee/trunk/cherokee/bogotime.c (added)
- cherokee/trunk/cherokee/bogotime.h (added)
- cherokee/trunk/cherokee/connection.c (modified) (2 diffs)
- cherokee/trunk/cherokee/handler_server_info.c (modified) (2 diffs)
- cherokee/trunk/cherokee/init.c (modified) (2 diffs)
- cherokee/trunk/cherokee/iocache.c (modified) (6 diffs)
- cherokee/trunk/cherokee/nonce.c (modified) (2 diffs)
- cherokee/trunk/cherokee/server-protected.h (modified) (1 diff)
- cherokee/trunk/cherokee/server.c (modified) (8 diffs)
- cherokee/trunk/cherokee/thread.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
cherokee/trunk/ChangeLog
r1653 r1654 1 1 2008-07-16 Alvaro Lopez Ortega <alvaro@alobbs.com> 2 3 * cherokee/Makefile.am, cherokee/init.c, 4 cherokee/handler_server_info.c, cherokee/bogotime.c, 5 cherokee/thread.c, cherokee/bogotime.h, cherokee/nonce.c, 6 cherokee/server-protected.h, cherokee/iocache.c, 7 cherokee/connection.c, cherokee/server.c: The 'bogonow' 8 time (trick) has been moved to a separate file. It is no longer a 9 cherokee_server_t property, so it can be accessed from within any 10 class. This is mostly a clean up patch. 2 11 3 12 * cherokee/main_guardian.c (main): Clean up. cherokee/trunk/cherokee/Makefile.am
r1574 r1654 945 945 config_node.c \ 946 946 config_reader.h \ 947 config_reader.c 947 config_reader.c \ 948 bogotime.h \ 949 bogotime.c 948 950 949 951 libcherokee_client_la_SOURCES = \ cherokee/trunk/cherokee/connection.c
r1614 r1654 26 26 #include "connection.h" 27 27 #include "connection-protected.h" 28 #include "bogotime.h" 28 29 29 30 #include <errno.h> … … 482 483 */ 483 484 cherokee_buffer_add_str (buffer, "Date: "); 484 cherokee_buffer_add_buffer (buffer, & CONN_SRV(conn)->bogo_now_strgmt);485 cherokee_buffer_add_buffer (buffer, &cherokee_bogonow_strgmt); 485 486 cherokee_buffer_add_str (buffer, CRLF); 486 487 cherokee/trunk/cherokee/handler_server_info.c
r1475 r1654 25 25 #include "common-internal.h" 26 26 #include "handler_server_info.h" 27 #include "bogotime.h" 27 28 28 29 #ifdef HAVE_SYS_UTSNAME_H … … 182 183 add_uptime_row (cherokee_buffer_t *buf, cherokee_server_t *srv) 183 184 { 184 unsigned int elapse = srv->bogo_now - srv->start_time;185 unsigned int elapse = cherokee_bogonow_now - srv->start_time; 185 186 unsigned int days; 186 187 unsigned int hours; cherokee/trunk/cherokee/init.c
r1524 r1654 29 29 #include "ncpus.h" 30 30 #include "util.h" 31 #include "bogotime.h" 31 32 32 33 … … 53 54 cherokee_trace_init(); 54 55 56 /* Init the bogotime mechanism 57 */ 58 cherokee_bogotime_init(); 59 55 60 /* Get the CPU number 56 61 */ cherokee/trunk/cherokee/iocache.c
r1610 r1654 31 31 #include "server-protected.h" 32 32 #include "util.h" 33 #include "bogotime.h" 33 34 34 35 #ifdef HAVE_SYS_MMAN_H … … 240 241 } 241 242 242 PRIV(entry)->stat_update = iocache->srv->bogo_now;243 PRIV(entry)->stat_update = cherokee_bogonow_now; 243 244 return ret_ok; 244 245 } … … 254 255 /* The stat information has to be fresh enough 255 256 */ 256 if ( iocache->srv->bogo_now >= (PRIV(entry)->stat_update + FRESHNESS_TIME_STAT)) {257 if (cherokee_bogonow_now >= (PRIV(entry)->stat_update + FRESHNESS_TIME_STAT)) { 257 258 ret = iocache_entry_update_stat (iocache, entry, filename); 258 259 if (ret != ret_ok) return ret; … … 312 313 313 314 PUBL(entry)->mmaped_len = entry->state.st_size; 314 PRIV(entry)->mmap_update = iocache->srv->bogo_now;315 PRIV(entry)->mmap_update = cherokee_bogonow_now; 315 316 316 317 return ret_ok; … … 331 332 if (PRIV(entry)->ref_counter > 1) 332 333 update = false; 333 else if ( iocache->srv->bogo_now < (PRIV(entry)->mmap_update + FRESHNESS_TIME_MMAP))334 else if (cherokee_bogonow_now < (PRIV(entry)->mmap_update + FRESHNESS_TIME_MMAP)) 334 335 update = false; 335 336 } … … 509 510 /* May update the stat info 510 511 */ 511 if ( iocache->srv->bogo_now >= (PRIV(entry)->stat_update + FRESHNESS_TIME_STAT)) {512 if (cherokee_bogonow_now >= (PRIV(entry)->stat_update + FRESHNESS_TIME_STAT)) { 512 513 ret = iocache_entry_update_stat (iocache, entry, filename); 513 514 if (unlikely (ret != ret_ok)) goto error; cherokee/trunk/cherokee/nonce.c
r1131 r1654 28 28 #include "connection-protected.h" 29 29 #include "server-protected.h" 30 #include "bogotime.h" 30 31 31 32 struct cherokee_nonce_table { … … 98 99 */ 99 100 cherokee_buffer_clean (nonce); 100 cherokee_buffer_add_ullong16(nonce, (cullong_t) CONN_SRV(conn)->bogo_now);101 cherokee_buffer_add_ullong16(nonce, (cullong_t) cherokee_bogonow_now); 101 102 cherokee_buffer_add_ulong16 (nonce, (culong_t) rand()); 102 103 cherokee_buffer_add_ulong16 (nonce, (culong_t) POINTER_TO_INT(conn)); cherokee/trunk/cherokee/server-protected.h
r1439 r1654 59 59 60 60 struct cherokee_server { 61 /* Current time61 /* Exit related 62 62 */ 63 63 time_t start_time; 64 time_t bogo_now;65 struct tm bogo_now_tmloc;66 struct tm bogo_now_tmgmt;67 int bogo_now_tzloc_sign;68 cuint_t bogo_now_tzloc_offset;69 cherokee_buffer_t bogo_now_strgmt;70 CHEROKEE_RWLOCK_T (bogo_now_mutex);71 72 /* Exit related73 */74 64 cherokee_buffer_t panic_action; 75 65 cherokee_boolean_t wanna_exit; cherokee/trunk/cherokee/server.c
r1568 r1654 79 79 #include "mime.h" 80 80 #include "util.h" 81 #include "dtm.h"82 81 #include "fdpoll.h" 83 82 #include "fdpoll-protected.h" … … 88 87 #include "config_reader.h" 89 88 #include "init.h" 89 #include "bogotime.h" 90 90 91 91 #define ENTRIES "core,server" … … 172 172 cherokee_buffer_add_str (&n->panic_action, CHEROKEE_PANIC_PATH); 173 173 174 /* Bogo now175 */176 n->bogo_now = 0;177 n->bogo_now_tzloc_sign = '+';178 n->bogo_now_tzloc_offset = 0;179 CHEROKEE_RWLOCK_INIT (&n->bogo_now_mutex, NULL);180 181 CHEROKEE_RWLOCK_WRITER (&n->bogo_now_mutex);182 cherokee_buffer_init (&n->bogo_now_strgmt);183 cherokee_buffer_ensure_size (&n->bogo_now_strgmt, DTM_SIZE_GMTTM_STR);184 CHEROKEE_RWLOCK_UNLOCK (&n->bogo_now_mutex);185 186 174 /* Time managing hack 187 175 */ … … 365 353 srv->vserver_default = NULL; 366 354 367 cherokee_buffer_mrproper (&srv->bogo_now_strgmt);368 355 cherokee_buffer_mrproper (&srv->timeout_header); 369 356 … … 1264 1251 1265 1252 1266 static void1267 update_bogo_now (cherokee_server_t *srv)1268 {1269 time_t newtime;1270 1271 /* Read the time1272 */1273 newtime = time (NULL);1274 if (srv->bogo_now >= newtime)1275 return;1276 1277 /* Update internal variables1278 */1279 CHEROKEE_RWLOCK_WRITER (&srv->bogo_now_mutex); /* 1.- lock as writer */1280 1281 srv->bogo_now = newtime;1282 1283 /* Convert time to both GMT and local time struct1284 */1285 cherokee_gmtime (&newtime, &srv->bogo_now_tmgmt);1286 cherokee_localtime (&newtime, &srv->bogo_now_tmloc);1287 1288 #ifdef HAVE_STRUCT_TM_GMTOFF1289 srv->bogo_now_tzloc_sign = srv->bogo_now_tmloc.tm_gmtoff < 0 ? '-' : '+';1290 srv->bogo_now_tzloc_offset = abs(srv->bogo_now_tmloc.tm_gmtoff / 3600);1291 #else1292 srv->bogo_now_tzloc_sign = timezone < 0 ? '-' : '+';1293 srv->bogo_now_tzloc_offset = abs(timezone / 3600);1294 #endif1295 1296 cherokee_buffer_clean (&srv->bogo_now_strgmt);1297 {1298 size_t szlen = 0;1299 char bufstr[DTM_SIZE_GMTTM_STR + 2];1300 1301 szlen = cherokee_dtm_gmttm2str (bufstr, sizeof(bufstr),1302 &srv->bogo_now_tmgmt);1303 cherokee_buffer_add (&srv->bogo_now_strgmt, bufstr, szlen);1304 }1305 1306 /* NOTE: a local time string should have {+-}timezone_offset (hours)1307 * added to date-time GMT string.1308 */1309 1310 CHEROKEE_RWLOCK_UNLOCK (&srv->bogo_now_mutex); /* 2.- release */1311 }1312 1313 1314 1253 ret_t 1315 1254 cherokee_server_unlock_threads (cherokee_server_t *srv) … … 1318 1257 cherokee_list_t *i; 1319 1258 1320 /* Update bogo _nowbefore launch the threads1321 */ 1322 update_bogo_now (srv);1259 /* Update bogotime before launch the threads 1260 */ 1261 cherokee_bogotime_update(); 1323 1262 1324 1263 /* Launch all the threads … … 1340 1279 /* Get the server time. 1341 1280 */ 1342 update_bogo_now (srv);1281 cherokee_bogotime_update (); 1343 1282 update_bogo_conns_num (srv); 1344 1283 … … 1355 1294 /* Logger flush 1356 1295 */ 1357 if (srv->log_flush_next < srv->bogo_now) {1296 if (srv->log_flush_next < cherokee_bogonow_now) { 1358 1297 flush_logs (srv); 1359 srv->log_flush_next = srv->bogo_now + srv->log_flush_elapse;1298 srv->log_flush_next = cherokee_bogonow_now + srv->log_flush_elapse; 1360 1299 } 1361 1300 1362 1301 /* Clean IO cache 1363 1302 */ 1364 if (srv->iocache_clean_next < srv->bogo_now) {1303 if (srv->iocache_clean_next < cherokee_bogonow_now) { 1365 1304 cherokee_iocache_clean_up (srv->iocache); 1366 srv->iocache_clean_next = srv->bogo_now + IOCACHE_DEFAULT_CLEAN_ELAPSE;1305 srv->iocache_clean_next = cherokee_bogonow_now + IOCACHE_DEFAULT_CLEAN_ELAPSE; 1367 1306 } 1368 1307 1369 1308 #ifdef _WIN32 1370 if (unlikely (cherokee_win32_shutdown_signaled (srv->bogo_now)))1309 if (unlikely (cherokee_win32_shutdown_signaled (cherokee_bogonow_now))) 1371 1310 srv->wanna_exit = true; 1372 1311 #endif cherokee/trunk/cherokee/thread.c
r1611 r1654 41 41 #include "util.h" 42 42 #include "fcgi_manager.h" 43 #include "bogotime.h" 43 44 44 45 … … 50 51 51 52 static void 52 update_bogo_now_internal (cherokee_thread_t *thd) 53 { 54 cherokee_server_t *srv = THREAD_SRV(thd); 55 53 update_bogo_now (cherokee_thread_t *thd) 54 { 56 55 /* Has it changed? 57 56 */ 58 if (thd->bogo_now == srv->bogo_now)57 if (thd->bogo_now == cherokee_bogonow_now) 59 58 return; 60 59 61 60 /* Update time_t 62 61 */ 63 thd->bogo_now = srv->bogo_now;62 thd->bogo_now = cherokee_bogonow_now; 64 63 65 64 /* Update struct tm 66 65 */ 67 memcpy (&thd->bogo_now_tmgmt, &srv->bogo_now_tmgmt, sizeof(struct tm)); 68 memcpy (&thd->bogo_now_tmloc, &srv->bogo_now_tmloc, sizeof(struct tm)); 66 cherokee_bogotime_lock_read(); 67 68 memcpy (&thd->bogo_now_tmgmt, &cherokee_bogonow_tmgmt, sizeof(struct tm)); 69 memcpy (&thd->bogo_now_tmloc, &cherokee_bogonow_tmloc, sizeof(struct tm)); 69 70 70 71 /* Update cherokee_buffer_t 71 72 */ 72 73 cherokee_buffer_clean (&thd->bogo_now_strgmt); 73 cherokee_buffer_add_buffer (&thd->bogo_now_strgmt, &srv->bogo_now_strgmt); 74 75 } 76 77 78 static void 79 update_bogo_now (cherokee_thread_t *thd) 80 { 81 CHEROKEE_RWLOCK_READER (&THREAD_SRV(thd)->bogo_now_mutex); 82 update_bogo_now_internal(thd); 83 CHEROKEE_RWLOCK_UNLOCK (&THREAD_SRV(thd)->bogo_now_mutex); 84 } 85 86 87 static void 88 try_to_update_bogo_now (cherokee_thread_t *thd) 89 { 90 int unlocked; 91 cherokee_server_t *srv = THREAD_SRV(thd); 92 93 /* Try to lock 94 */ 95 unlocked = CHEROKEE_RWLOCK_TRYREADER (&srv->bogo_now_mutex); /* 1.- lock a reader */ 96 if (unlocked) return; 97 98 update_bogo_now_internal (thd); 99 100 CHEROKEE_RWLOCK_UNLOCK (&srv->bogo_now_mutex); /* 2.- release */ 74 cherokee_buffer_add_buffer (&thd->bogo_now_strgmt, &cherokee_bogonow_strgmt); 75 76 cherokee_bogotime_release(); 101 77 } 102 78 … … 1522 1498 /* Try to update bogo_now 1523 1499 */ 1524 try_to_update_bogo_now (thd);1500 cherokee_bogotime_try_update(); 1525 1501 1526 1502 /* Reset the server socket. … … 1860 1836 /* Try to update bogo_now 1861 1837 */ 1862 try_to_update_bogo_now (thd); 1863 1838 cherokee_bogotime_try_update(); 1864 1839 1865 1840 /* If the thread is full of connections, it should not