Mercurial > hg > nginx
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 |