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

Ubuntu 下 nginx-1.24.0 源码分析 - pool->cleanup

pool->cleanup

ngx_pool_s 定义在 src/core/ngx_palloc.h

struct ngx_pool_s {
    ngx_pool_data_t       d;
    size_t                max;
    ngx_pool_t           *current;
    ngx_chain_t          *chain;
    ngx_pool_large_t     *large;
    ngx_pool_cleanup_t   *cleanup;
    ngx_log_t            *log;
};

ngx_pool_cleanup_t

定义

typedef struct ngx_pool_cleanup_s  ngx_pool_cleanup_t;

struct ngx_pool_cleanup_s {
    ngx_pool_cleanup_pt   handler;
    void                 *data;
    ngx_pool_cleanup_t   *next;
};

ngx_pool_cleanup_s 类型及成员

ngx_pool_cleanup_s 是 Nginx 内存池(ngx_pool_t)中用于管理资源清理的结构体,
其核心作用是在内存池销毁时自动执行用户注册的清理逻辑


成员详解

(1) handler(函数指针)
  • 类型ngx_pool_cleanup_pt
    定义为:
    typedef void (*ngx_pool_cleanup_pt)(void *data);
    
  • 作用
    指向一个清理函数,当内存池被销毁时(调用 ngx_destroy_pool),该函数会被自动调用。
  • 意图
    提供一种机制,允许用户将资源释放逻辑(如关闭文件、释放锁、销毁临时数据)与内存池的生命周期绑定。例如:
    void my_cleanup(void *data) {
        int *fd = data;
        close(*fd);  // 关闭文件描述符
    }
    

(2) data(通用指针)
  • 类型void*
    指向任意类型的数据。
  • 作用
    存储需要传递给 handler 的上下文数据。例如,文件描述符、动态分配的内存地址、自定义结构体指针等。
  • 意图
    将清理操作与具体资源关联。

(3) next(链表指针)
  • 类型ngx_pool_cleanup_t*
    指向下一个 ngx_pool_cleanup_s 结构体。

  • 作用
    将多个清理项(ngx_pool_cleanup_s)串联成链表,形成一个清理队列。

  • 意图
    支持注册多个清理操作。内存池销毁时,按链表顺序依次执行所有 handler(通常为 LIFO 顺序,即后注册的先执行)。

  • 链表顺序
    新注册的清理项会被插入到链表头部(LIFO 顺序),因此销毁时最后注册的清理函数会先执行。


设计意图

资源生命周期管理
通过将资源释放逻辑与内存池绑定,确保资源在内存池销毁时自动释放,避免手动管理导致的内存泄漏或悬空指针。


相关文章:

  • 半导体制造工艺(二)光刻工艺—掩模版
  • SpringAI从人工智障到人工智能的实战改造
  • 人工智能时代:Python学习的全面攻略路线图
  • 二分法 ──── 算法3
  • JAVA实战开源项目:靓车汽车销售网站(Vue+SpringBoot) 附源码
  • 安装floodlight
  • unity学习54:图片+精灵+遮罩mask,旧版文本 text 和新的TMP文本
  • vi编辑器的使用(内附快捷键的使用)(超详细)
  • 图扑数字孪生:解锁压缩空气储能管控新高度
  • elementplus点击按钮直接预览图片
  • GitHub SSH连接问题解决指南
  • Python的那些事第三十一篇:快速数据帧处理与可视化的高效工具Vaex
  • 计算机毕业设计SpringBoot+Vue.js植物健康系统(源码+文档+PPT+讲解)
  • 使用ZFile打造属于自己的私有云系统结合内网穿透实现安全远程访问
  • 对话Stack Overflow,OceanBase CTO 杨传辉谈分布式数据库的“前世今生”
  • Template Method 设计模式
  • 企业数字化过程中数据仓库与商业智能 BI的目标
  • 算法-二叉树篇04-翻转二叉树
  • 开源软件的版权保护措施
  • JavaEE 编写Java程序,实现一个简单的echo程序(网络编程UDP实践练习)
  • 西夏文残碑等文物来沪,见证一段神秘灿烂的历史
  • 五大国有银行明确将撤销监事会
  • 外交部:美方应在平等、尊重和互惠的基础上同中方开展对话
  • 石家庄:城市更新,生活向美
  • 病人有头发,照护者不发疯:《黑镜》中的身体缺席与虚伪关怀
  • 西湖大学本科招生新增三省两市,首次面向上海招生