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);