ngx_rtmp_shared模块对ngx_chain_t的操作总结
void
ngx_rtmp_free_shared_chain(ngx_rtmp_core_srv_conf_t *cscf, ngx_chain_t *in)
{
ngx_chain_t *cl;
//如果引用计数不为0,返回
if (ngx_rtmp_ref_put(in)) {
return;
}
//如果引用计数为0 的,将当前chain放到需要释放的链表当中,下次循环利用
for (cl = in; ; cl = cl->next) {
if (cl->next == NULL) {
cl->next = cscf->free;
cscf->free = in;
return;
}
}
}
注意一点的是, ngx_rtmp_free_shared_chain 只是将in挂载到了cscf->free, 对in链表中buf的数据并没有做任何处理,现在cscf->free 头结点中可以认为是已经被写入值的
为了保证下次从free链表中分配的内存为空,ngx_rtmp_alloc_shared_buf 使用了ngx_pcalloc 对分配的内存进行了清零操作
ngx_chain_t *
ngx_rtmp_alloc_shared_buf(ngx_rtmp_core_srv_conf_t *cscf)
{
u_char *p;
ngx_chain_t *out;
ngx_buf_t *b;
size_t size;
if (cscf->free) {
out = cscf->free;
cscf->free = out->next;
} else {
size = cscf->chunk_size + NGX_RTMP_MAX_CHUNK_HEADER;
// 对新分配的内存进行清零
p = ngx_pcalloc(cscf->pool, NGX_RTMP_REFCOUNT_BYTES
+ sizeof(ngx_chain_t)
+ sizeof(ngx_buf_t)
+ size);
if (p == NULL) {
return NULL;
}
p += NGX_RTMP_REFCOUNT_BYTES;
out = (ngx_chain_t *)p;
p += sizeof(ngx_chain_t);
out->buf = (ngx_buf_t *)p;
p += sizeof(ngx_buf_t);
out->buf->start = p;
out->buf->end = p + size;
}
out->next = NULL;
b = out->buf;
b->pos = b->last = b->start + NGX_RTMP_MAX_CHUNK_HEADER;
b->memory = 1;
/* buffer has refcount =1 when created! */
//引用计数设为1
ngx_rtmp_ref_set(out, 1);
return out;
}
ngx_rtmp_shared模块对ngx_chain_t的操作总结相关推荐
- Winform开发框架中工作流模块之审批会签操作
在前面介绍了框架中工作流的几个开发过程,本篇随笔重点介绍一下日常审批环节中的具体处理过程,从开始创建表单,以及各个审批.会签过程的流转过程,希望大家对其中流程的处理有一个大概的印象. 1.请假申请表单 ...
- python 文件操作的模块_Python之文件操作修改模块
1.使用OS模块进行path路径操作 操作的语法为os.path.方法名(): import os # 首先导入os模块 *abspath()方法:获取当前文件的全路径,所带参数为file: file ...
- python 中文件输入输出及os模块对文件系统的操作
整理了一下python 中文件的输入输出及主要介绍一些os模块中对文件系统的操作. 文件输入输出 1.内建函数open(file_name,文件打开模式,通用换行符支持),打开文件返回文件对象. 2. ...
- boost::mpi模块非阻塞点对点操作的测试
boost::mpi模块非阻塞点对点操作的测试 实现功能 C++实现代码 实现功能 boost::mpi模块非阻塞点对点操作的测试 C++实现代码 #include <boost/mpi/non ...
- python jsonpath-rw_Python使用jsonpath-rw模块处理Json对象操作示例
本文实例讲述了Python使用jsonpath-rw模块处理Json对象操作.分享给大家供大家参考,具体如下: 这两天在写一个爬虫,需要从网站返回的json数据提取一些有用的数据. 向url发起请求, ...
- nodejs01——安装及使用、服务端及客户端、commonjs规范、fs模块的使用(文件操作及目录操作)、stream、buffer、WebServer、端口、动态资源及静态资源、头信息、请求方式
nodejs的安装及使用 服务端及客户端 commonjs规范 fs模块的使用(文件操作及目录操作) stream buffer // Node.js介绍 Node.js 诞生于2009年,Node. ...
- 用keyboard模块模拟记录键盘操作
用keyboard模块模拟记录键盘操作 介绍的是keyboard这个模块 该模块的特征: 所有键盘事件上的全局hook (无论焦点如何都捕获键). 监听并发送键盘事件 纯Python,不需要编译c模块 ...
- 想知道自己的某个内存的小视频总时长?那这篇CSDN很适合你,快来看看Python如何实现求MP4时长吧(包含os模块和moviepy模块的全套基础操作)
今天我们就来看看哪个老司机的视频时长最长,嘿嘿嘿,废话不多说,任何内容都瞒不住咱的程序,包含os模块和moviepy模块的全套基础操作哦!我们直接开始! 老司机求视频时长 一.我们需要的模块与包的使用 ...
- 下载perl的mysql模块_安装用于操作MySQL的Perl模块
在我使用Webmin(version 1.480)管理FreeBSD主机上的MySQL数据库服务器时出现: "警告:您的系统未安装Perl 模块 DBI 和 DBD::mysql,Webmi ...
最新文章
- Lesson 6.1 身份证识别: 提取字段
- 虚拟机网络设置方法——转载
- linux查看 idt日志,实现RCP的日志管理
- BZOJ 1717 [Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组)
- JS——实现短信验证码的倒计时功能(没有验证码,只有倒计时)
- MySQL基础(二)数据库、表的创建及操作
- 图像语义分割 -- FCN
- JS面试之对象(2)
- 布局时margin会影响父元素
- sql 运算符_了解SQL ANY和ALL运算符
- 音频功率放大器,250种功放电路图集锦,文件是JPG文件
- 欠四大银行信用卡不还,最终会怎么样?
- 学python之前先掌握-成为黑客前,你首先应该掌握的Python技术
- BOOT客户管理系统(详解)
- css 剪辑图片_css实现图片剪裁
- pycharm跑程序时出现Process finished with exit code -1073740791 (0xC0000409)
- 计算机保密dss是啥,什么是DSS?
- 设置elment ui plus 的el table的边框线
- [RK3288][Android6.0] WiFi的dts配置说明(AP6335)
- arctoolbox工具