当前位置: 首页 > article >正文

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(5)

详解(5)


    if (old_cycle->shared_memory.part.nelts) {
        n = old_cycle->shared_memory.part.nelts;
        for (part = old_cycle->shared_memory.part.next; part; part = part->next)
        {
            n += part->nelts;
        }

    } else {
        n = 1;
    }

    if (ngx_list_init(&cycle->shared_memory, pool, n, sizeof(ngx_shm_zone_t))
        != NGX_OK)
    {
        ngx_destroy_pool(pool);
        return NULL;
    }

1 检查旧周期共享内存是否存在

if (old_cycle->shared_memory.part.nelts) {

判断旧周期(old_cycle)的共享内存列表是否非空。
shared_memory 存储 Nginx 的共享内存区域(如 ssl_session_cachelimit_conn_zone)。
在平滑重启或重新配置时,新周期需继承这些区域以避免重复创建。


2 初始化容量 n 为旧周期共享内存数量

n = old_cycle->shared_memory.part.nelts;

获取旧周期共享内存列表第一个分片(part)的元素数量。

ngx_list_t 是分片链表结构,每个分片(part)包含 nelts 个元素。此处初始化 n 为第一个分片的元素数。


3 遍历所有分片累加元素数量

for (part = old_cycle->shared_memory.part.next; part; part = part->next) {
    n += part->nelts;
}

遍历旧周期 shared_memory 的所有分片,累加总元素数到 n

ngx_list_t 可能包含多个分片(如元素数量超过单个分片容量),需遍历所有分片统计总数。

精确预分配:确保新周期的 shared_memory 容量足够容纳所有旧区域,避免扩容开销。


4 若无旧共享内存,设置默认容量

} else {
    n = 1;
}

若旧周期无共享内存,设置初始容量 n = 1

1 是最小值,确保至少能容纳一个共享内存区域(如默认配置)。


5 初始化 shared_memory 列表

if (ngx_list_init(&cycle->shared_memory, pool, n, sizeof(ngx_shm_zone_t)) != NGX_OK)

初始化新周期的 shared_memory 列表。


6 错误处理

{
    ngx_destroy_pool(pool);
    return NULL;
}

若初始化失败,销毁内存池并终止函数。
确保失败时释放所有已分配资源。



http://www.kler.cn/a/567874.html

相关文章:

  • vue3-print-nb的使用,点击回调
  • 《深度揭秘:生成对抗网络如何重塑遥感图像分析精度》
  • PHP的学习
  • include 与 require 的区别及最佳使用场景
  • 如何正确理解mAP、精度、召回率等概念
  • AQS源码级别解析
  • Redis大key如何处理的?
  • 【Java进阶】java设计模式之单例模式
  • c++_sort函数
  • Java设计模式 —— 【行为型模式】中介者模式(Mediator Pattern)详解
  • 实验环境搭建集锦(docker linux ros2+强化学习环境+linux上单片机串口调试)
  • OpenAI 正式发布 GPT-4.5 模型
  • FastAdmin 与其他后台框架的对比分析
  • 使用AI后为什么思考会变得困难?
  • INT202 Complexity of Algroithms 算法的复杂度
  • 第49天:Web开发-JavaEE应用SpringBoot栈模版注入ThymeleafFreemarkerVelocity
  • JVM垃圾回收机制垃圾回收相关算法垃圾收集器
  • 域名解析ip后如何查询该ip地址
  • 保姆级教程:用Chart.js实现柱状图与折线图联动
  • Harmony os next~鸿蒙原子化服务开发实战:天气卡片开发全解析