comparison src/event/ngx_event_openssl.c @ 1760:49429f5b2d94

use ngx_queue.h
author Igor Sysoev <igor@sysoev.ru>
date Thu, 20 Dec 2007 21:01:00 +0000
parents 89234cfbf810
children 14510c3cc6cb
comparison
equal deleted inserted replaced
1759:89234cfbf810 1760:49429f5b2d94
1232 } 1232 }
1233 1233
1234 ngx_rbtree_init(&cache->session_rbtree, &cache->sentinel, 1234 ngx_rbtree_init(&cache->session_rbtree, &cache->sentinel,
1235 ngx_ssl_session_rbtree_insert_value); 1235 ngx_ssl_session_rbtree_insert_value);
1236 1236
1237 cache->session_cache_head.prev = NULL; 1237 ngx_queue_init(&cache->expire_queue);
1238 cache->session_cache_head.next = &cache->session_cache_tail;
1239
1240 cache->session_cache_tail.prev = &cache->session_cache_head;
1241 cache->session_cache_tail.next = NULL;
1242 1238
1243 shm_zone->data = cache; 1239 shm_zone->data = cache;
1244 1240
1245 return NGX_OK; 1241 return NGX_OK;
1246 } 1242 }
1351 sess_id->len = len; 1347 sess_id->len = len;
1352 sess_id->session = cached_sess; 1348 sess_id->session = cached_sess;
1353 1349
1354 sess_id->expire = ngx_time() + SSL_CTX_get_timeout(ssl_ctx); 1350 sess_id->expire = ngx_time() + SSL_CTX_get_timeout(ssl_ctx);
1355 1351
1356 sess_id->next = cache->session_cache_head.next; 1352 ngx_queue_insert_head(&cache->expire_queue, &sess_id->queue);
1357 sess_id->next->prev = sess_id;
1358 sess_id->prev = &cache->session_cache_head;
1359 cache->session_cache_head.next = sess_id;
1360 1353
1361 ngx_rbtree_insert(&cache->session_rbtree, &sess_id->node); 1354 ngx_rbtree_insert(&cache->session_rbtree, &sess_id->node);
1362 1355
1363 ngx_shmtx_unlock(&shpool->mutex); 1356 ngx_shmtx_unlock(&shpool->mutex);
1364 1357
1454 sess = d2i_SSL_SESSION(NULL, &p, sess_id->len); 1447 sess = d2i_SSL_SESSION(NULL, &p, sess_id->len);
1455 1448
1456 return sess; 1449 return sess;
1457 } 1450 }
1458 1451
1459 sess_id->next->prev = sess_id->prev; 1452 ngx_queue_remove(&sess_id->queue);
1460 sess_id->prev->next = sess_id->next;
1461 1453
1462 ngx_rbtree_delete(&cache->session_rbtree, node); 1454 ngx_rbtree_delete(&cache->session_rbtree, node);
1463 1455
1464 ngx_slab_free_locked(shpool, sess_id->session); 1456 ngx_slab_free_locked(shpool, sess_id->session);
1465 #if (NGX_PTR_SIZE == 4) 1457 #if (NGX_PTR_SIZE == 4)
1537 sess_id = (ngx_ssl_sess_id_t *) node; 1529 sess_id = (ngx_ssl_sess_id_t *) node;
1538 1530
1539 rc = ngx_memn2cmp(id, sess_id->id, len, (size_t) node->data); 1531 rc = ngx_memn2cmp(id, sess_id->id, len, (size_t) node->data);
1540 1532
1541 if (rc == 0) { 1533 if (rc == 0) {
1542 sess_id->next->prev = sess_id->prev; 1534
1543 sess_id->prev->next = sess_id->next; 1535 ngx_queue_remove(&sess_id->queue);
1544 1536
1545 ngx_rbtree_delete(&cache->session_rbtree, node); 1537 ngx_rbtree_delete(&cache->session_rbtree, node);
1546 1538
1547 ngx_slab_free_locked(shpool, sess_id->session); 1539 ngx_slab_free_locked(shpool, sess_id->session);
1548 #if (NGX_PTR_SIZE == 4) 1540 #if (NGX_PTR_SIZE == 4)
1569 static void 1561 static void
1570 ngx_ssl_expire_sessions(ngx_ssl_session_cache_t *cache, 1562 ngx_ssl_expire_sessions(ngx_ssl_session_cache_t *cache,
1571 ngx_slab_pool_t *shpool, ngx_uint_t n) 1563 ngx_slab_pool_t *shpool, ngx_uint_t n)
1572 { 1564 {
1573 time_t now; 1565 time_t now;
1566 ngx_queue_t *q;
1574 ngx_ssl_sess_id_t *sess_id; 1567 ngx_ssl_sess_id_t *sess_id;
1575 1568
1576 now = ngx_time(); 1569 now = ngx_time();
1577 1570
1578 while (n < 3) { 1571 while (n < 3) {
1579 1572
1580 sess_id = cache->session_cache_tail.prev; 1573 if (ngx_queue_empty(&cache->expire_queue)) {
1581
1582 if (sess_id == &cache->session_cache_head) {
1583 return; 1574 return;
1584 } 1575 }
1576
1577 q = ngx_queue_last(&cache->expire_queue);
1578
1579 sess_id = ngx_queue_data(q, ngx_ssl_sess_id_t, queue);
1585 1580
1586 if (n++ != 0 && sess_id->expire > now) { 1581 if (n++ != 0 && sess_id->expire > now) {
1587 return; 1582 return;
1588 } 1583 }
1589 1584
1590 sess_id->next->prev = sess_id->prev; 1585 ngx_queue_remove(q);
1591 sess_id->prev->next = sess_id->next;
1592
1593 ngx_rbtree_delete(&cache->session_rbtree, &sess_id->node);
1594 1586
1595 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ngx_cycle->log, 0, 1587 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ngx_cycle->log, 0,
1596 "expire session: %08Xi", sess_id->node.key); 1588 "expire session: %08Xi", sess_id->node.key);
1589
1590 ngx_rbtree_delete(&cache->session_rbtree, &sess_id->node);
1597 1591
1598 ngx_slab_free_locked(shpool, sess_id->session); 1592 ngx_slab_free_locked(shpool, sess_id->session);
1599 #if (NGX_PTR_SIZE == 4) 1593 #if (NGX_PTR_SIZE == 4)
1600 ngx_slab_free_locked(shpool, sess_id->id); 1594 ngx_slab_free_locked(shpool, sess_id->id);
1601 #endif 1595 #endif