Mercurial > hg > nginx-quic
comparison src/event/ngx_event_openssl.c @ 1759:89234cfbf810
embed session_rbtree and sentinel inside ngx_ssl_session_cache_t
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 20 Dec 2007 20:35:23 +0000 |
parents | 34e88556c15e |
children | 49429f5b2d94 |
comparison
equal
deleted
inserted
replaced
1758:34e88556c15e | 1759:89234cfbf810 |
---|---|
1215 | 1215 |
1216 static ngx_int_t | 1216 static ngx_int_t |
1217 ngx_ssl_session_cache_init(ngx_shm_zone_t *shm_zone, void *data) | 1217 ngx_ssl_session_cache_init(ngx_shm_zone_t *shm_zone, void *data) |
1218 { | 1218 { |
1219 ngx_slab_pool_t *shpool; | 1219 ngx_slab_pool_t *shpool; |
1220 ngx_rbtree_node_t *sentinel; | |
1221 ngx_ssl_session_cache_t *cache; | 1220 ngx_ssl_session_cache_t *cache; |
1222 | 1221 |
1223 if (data) { | 1222 if (data) { |
1224 shm_zone->data = data; | 1223 shm_zone->data = data; |
1225 return NGX_OK; | 1224 return NGX_OK; |
1230 cache = ngx_slab_alloc(shpool, sizeof(ngx_ssl_session_cache_t)); | 1229 cache = ngx_slab_alloc(shpool, sizeof(ngx_ssl_session_cache_t)); |
1231 if (cache == NULL) { | 1230 if (cache == NULL) { |
1232 return NGX_ERROR; | 1231 return NGX_ERROR; |
1233 } | 1232 } |
1234 | 1233 |
1234 ngx_rbtree_init(&cache->session_rbtree, &cache->sentinel, | |
1235 ngx_ssl_session_rbtree_insert_value); | |
1236 | |
1235 cache->session_cache_head.prev = NULL; | 1237 cache->session_cache_head.prev = NULL; |
1236 cache->session_cache_head.next = &cache->session_cache_tail; | 1238 cache->session_cache_head.next = &cache->session_cache_tail; |
1237 | 1239 |
1238 cache->session_cache_tail.prev = &cache->session_cache_head; | 1240 cache->session_cache_tail.prev = &cache->session_cache_head; |
1239 cache->session_cache_tail.next = NULL; | 1241 cache->session_cache_tail.next = NULL; |
1240 | |
1241 cache->session_rbtree = ngx_slab_alloc(shpool, sizeof(ngx_rbtree_t)); | |
1242 if (cache->session_rbtree == NULL) { | |
1243 return NGX_ERROR; | |
1244 } | |
1245 | |
1246 sentinel = ngx_slab_alloc(shpool, sizeof(ngx_rbtree_node_t)); | |
1247 if (sentinel == NULL) { | |
1248 return NGX_ERROR; | |
1249 } | |
1250 | |
1251 ngx_rbtree_init(cache->session_rbtree, sentinel, | |
1252 ngx_ssl_session_rbtree_insert_value); | |
1253 | 1242 |
1254 shm_zone->data = cache; | 1243 shm_zone->data = cache; |
1255 | 1244 |
1256 return NGX_OK; | 1245 return NGX_OK; |
1257 } | 1246 } |
1367 sess_id->next = cache->session_cache_head.next; | 1356 sess_id->next = cache->session_cache_head.next; |
1368 sess_id->next->prev = sess_id; | 1357 sess_id->next->prev = sess_id; |
1369 sess_id->prev = &cache->session_cache_head; | 1358 sess_id->prev = &cache->session_cache_head; |
1370 cache->session_cache_head.next = sess_id; | 1359 cache->session_cache_head.next = sess_id; |
1371 | 1360 |
1372 ngx_rbtree_insert(cache->session_rbtree, &sess_id->node); | 1361 ngx_rbtree_insert(&cache->session_rbtree, &sess_id->node); |
1373 | 1362 |
1374 ngx_shmtx_unlock(&shpool->mutex); | 1363 ngx_shmtx_unlock(&shpool->mutex); |
1375 | 1364 |
1376 return 0; | 1365 return 0; |
1377 | 1366 |
1430 | 1419 |
1431 shpool = (ngx_slab_pool_t *) shm_zone->shm.addr; | 1420 shpool = (ngx_slab_pool_t *) shm_zone->shm.addr; |
1432 | 1421 |
1433 ngx_shmtx_lock(&shpool->mutex); | 1422 ngx_shmtx_lock(&shpool->mutex); |
1434 | 1423 |
1435 node = cache->session_rbtree->root; | 1424 node = cache->session_rbtree.root; |
1436 sentinel = cache->session_rbtree->sentinel; | 1425 sentinel = cache->session_rbtree.sentinel; |
1437 | 1426 |
1438 while (node != sentinel) { | 1427 while (node != sentinel) { |
1439 | 1428 |
1440 if (hash < node->key) { | 1429 if (hash < node->key) { |
1441 node = node->left; | 1430 node = node->left; |
1468 } | 1457 } |
1469 | 1458 |
1470 sess_id->next->prev = sess_id->prev; | 1459 sess_id->next->prev = sess_id->prev; |
1471 sess_id->prev->next = sess_id->next; | 1460 sess_id->prev->next = sess_id->next; |
1472 | 1461 |
1473 ngx_rbtree_delete(cache->session_rbtree, node); | 1462 ngx_rbtree_delete(&cache->session_rbtree, node); |
1474 | 1463 |
1475 ngx_slab_free_locked(shpool, sess_id->session); | 1464 ngx_slab_free_locked(shpool, sess_id->session); |
1476 #if (NGX_PTR_SIZE == 4) | 1465 #if (NGX_PTR_SIZE == 4) |
1477 ngx_slab_free_locked(shpool, sess_id->id); | 1466 ngx_slab_free_locked(shpool, sess_id->id); |
1478 #endif | 1467 #endif |
1525 | 1514 |
1526 shpool = (ngx_slab_pool_t *) shm_zone->shm.addr; | 1515 shpool = (ngx_slab_pool_t *) shm_zone->shm.addr; |
1527 | 1516 |
1528 ngx_shmtx_lock(&shpool->mutex); | 1517 ngx_shmtx_lock(&shpool->mutex); |
1529 | 1518 |
1530 node = cache->session_rbtree->root; | 1519 node = cache->session_rbtree.root; |
1531 sentinel = cache->session_rbtree->sentinel; | 1520 sentinel = cache->session_rbtree.sentinel; |
1532 | 1521 |
1533 while (node != sentinel) { | 1522 while (node != sentinel) { |
1534 | 1523 |
1535 if (hash < node->key) { | 1524 if (hash < node->key) { |
1536 node = node->left; | 1525 node = node->left; |
1551 | 1540 |
1552 if (rc == 0) { | 1541 if (rc == 0) { |
1553 sess_id->next->prev = sess_id->prev; | 1542 sess_id->next->prev = sess_id->prev; |
1554 sess_id->prev->next = sess_id->next; | 1543 sess_id->prev->next = sess_id->next; |
1555 | 1544 |
1556 ngx_rbtree_delete(cache->session_rbtree, node); | 1545 ngx_rbtree_delete(&cache->session_rbtree, node); |
1557 | 1546 |
1558 ngx_slab_free_locked(shpool, sess_id->session); | 1547 ngx_slab_free_locked(shpool, sess_id->session); |
1559 #if (NGX_PTR_SIZE == 4) | 1548 #if (NGX_PTR_SIZE == 4) |
1560 ngx_slab_free_locked(shpool, sess_id->id); | 1549 ngx_slab_free_locked(shpool, sess_id->id); |
1561 #endif | 1550 #endif |
1599 } | 1588 } |
1600 | 1589 |
1601 sess_id->next->prev = sess_id->prev; | 1590 sess_id->next->prev = sess_id->prev; |
1602 sess_id->prev->next = sess_id->next; | 1591 sess_id->prev->next = sess_id->next; |
1603 | 1592 |
1604 ngx_rbtree_delete(cache->session_rbtree, &sess_id->node); | 1593 ngx_rbtree_delete(&cache->session_rbtree, &sess_id->node); |
1605 | 1594 |
1606 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ngx_cycle->log, 0, | 1595 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ngx_cycle->log, 0, |
1607 "expire session: %08Xi", sess_id->node.key); | 1596 "expire session: %08Xi", sess_id->node.key); |
1608 | 1597 |
1609 ngx_slab_free_locked(shpool, sess_id->session); | 1598 ngx_slab_free_locked(shpool, sess_id->session); |