embed session_rbtree and sentinel inside ngx_ssl_session_cache_t
Igor Sysoev
14 years ago
1216 | 1216 | ngx_ssl_session_cache_init(ngx_shm_zone_t *shm_zone, void *data) |
1217 | 1217 | { |
1218 | 1218 | ngx_slab_pool_t *shpool; |
1219 | ngx_rbtree_node_t *sentinel; | |
1220 | 1219 | ngx_ssl_session_cache_t *cache; |
1221 | 1220 | |
1222 | 1221 | if (data) { |
1231 | 1230 | return NGX_ERROR; |
1232 | 1231 | } |
1233 | 1232 | |
1233 | ngx_rbtree_init(&cache->session_rbtree, &cache->sentinel, | |
1234 | ngx_ssl_session_rbtree_insert_value); | |
1235 | ||
1234 | 1236 | cache->session_cache_head.prev = NULL; |
1235 | 1237 | cache->session_cache_head.next = &cache->session_cache_tail; |
1236 | 1238 | |
1237 | 1239 | cache->session_cache_tail.prev = &cache->session_cache_head; |
1238 | 1240 | cache->session_cache_tail.next = NULL; |
1239 | ||
1240 | cache->session_rbtree = ngx_slab_alloc(shpool, sizeof(ngx_rbtree_t)); | |
1241 | if (cache->session_rbtree == NULL) { | |
1242 | return NGX_ERROR; | |
1243 | } | |
1244 | ||
1245 | sentinel = ngx_slab_alloc(shpool, sizeof(ngx_rbtree_node_t)); | |
1246 | if (sentinel == NULL) { | |
1247 | return NGX_ERROR; | |
1248 | } | |
1249 | ||
1250 | ngx_rbtree_init(cache->session_rbtree, sentinel, | |
1251 | ngx_ssl_session_rbtree_insert_value); | |
1252 | 1241 | |
1253 | 1242 | shm_zone->data = cache; |
1254 | 1243 | |
1368 | 1357 | sess_id->prev = &cache->session_cache_head; |
1369 | 1358 | cache->session_cache_head.next = sess_id; |
1370 | 1359 | |
1371 | ngx_rbtree_insert(cache->session_rbtree, &sess_id->node); | |
1360 | ngx_rbtree_insert(&cache->session_rbtree, &sess_id->node); | |
1372 | 1361 | |
1373 | 1362 | ngx_shmtx_unlock(&shpool->mutex); |
1374 | 1363 | |
1431 | 1420 | |
1432 | 1421 | ngx_shmtx_lock(&shpool->mutex); |
1433 | 1422 | |
1434 | node = cache->session_rbtree->root; | |
1435 | sentinel = cache->session_rbtree->sentinel; | |
1423 | node = cache->session_rbtree.root; | |
1424 | sentinel = cache->session_rbtree.sentinel; | |
1436 | 1425 | |
1437 | 1426 | while (node != sentinel) { |
1438 | 1427 | |
1469 | 1458 | sess_id->next->prev = sess_id->prev; |
1470 | 1459 | sess_id->prev->next = sess_id->next; |
1471 | 1460 | |
1472 | ngx_rbtree_delete(cache->session_rbtree, node); | |
1461 | ngx_rbtree_delete(&cache->session_rbtree, node); | |
1473 | 1462 | |
1474 | 1463 | ngx_slab_free_locked(shpool, sess_id->session); |
1475 | 1464 | #if (NGX_PTR_SIZE == 4) |
1526 | 1515 | |
1527 | 1516 | ngx_shmtx_lock(&shpool->mutex); |
1528 | 1517 | |
1529 | node = cache->session_rbtree->root; | |
1530 | sentinel = cache->session_rbtree->sentinel; | |
1518 | node = cache->session_rbtree.root; | |
1519 | sentinel = cache->session_rbtree.sentinel; | |
1531 | 1520 | |
1532 | 1521 | while (node != sentinel) { |
1533 | 1522 | |
1552 | 1541 | sess_id->next->prev = sess_id->prev; |
1553 | 1542 | sess_id->prev->next = sess_id->next; |
1554 | 1543 | |
1555 | ngx_rbtree_delete(cache->session_rbtree, node); | |
1544 | ngx_rbtree_delete(&cache->session_rbtree, node); | |
1556 | 1545 | |
1557 | 1546 | ngx_slab_free_locked(shpool, sess_id->session); |
1558 | 1547 | #if (NGX_PTR_SIZE == 4) |
1600 | 1589 | sess_id->next->prev = sess_id->prev; |
1601 | 1590 | sess_id->prev->next = sess_id->next; |
1602 | 1591 | |
1603 | ngx_rbtree_delete(cache->session_rbtree, &sess_id->node); | |
1592 | ngx_rbtree_delete(&cache->session_rbtree, &sess_id->node); | |
1604 | 1593 | |
1605 | 1594 | ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ngx_cycle->log, 0, |
1606 | 1595 | "expire session: %08Xi", sess_id->node.key); |