glibc: nptl: pthread_attr_init & pthread_attr_destroy;内存泄漏的可能
https://linux.die.net/man/3/pthread_attr_destroy
这里列的两个接口是一对,在上面手册里有说,如果不再需要attr对象,需要使用pthread_attr_destroy,来销毁这个对象。但是如果不详细看,其实看不出来为什么一定要成对使用。
When a thread attributes object is no longer required, it should be destroyed using the pthread_attr_destroy() function. Destroying a thread attributes object has no effect on threads that were created using that object.
但是没有说为什么?
从源代码看destroy函数里有这么一段代码
{
if (iattr->extension != NULL)
{
free (iattr->extension->cpuset);
free (iattr->extension);
}
}
明显是调用了free释放内存。
所以如果在init和destroy不成对使用时,会有内存泄漏的风险。
这个extension是谁申请内存的呢?搜索glibc的代码会发现,下面这个函数有申请内存给extension。
pthread_attr_setaffinity_np
https://linux.die.net/man/3/pthread_attr_setaffinity_np
然后上面这个接口的使用手册也是没有提destroy的事情。所以还是有机会出现内存泄漏。
这也其实就容易让人挖坑,后人容易掉进去
假如一开始使用attr-init 函数时,不需要attr_setaffinity_np的操作。即使不销毁attr对象也是没有问题。这就造成一个坑。
后续随着业务的变更,有对affinity修改的需要,这时候如果没有销毁就造成内存泄漏。掉坑里。
相关文章
- 微服务(十二)——Steam消息驱动&Sleuth链路监控
- 【Flutter&Flame 游戏 - 贰】操纵杆与角色移动
- Web阶段:第十五章:文件上传&下载
- CNN基础 & CV基本应用
- 正向代理&反向代理(校园网为例)
- 中文预训练模型!| 哈工大 && 科大讯飞 提出多任务预训练模型LERT(含源码)
- ECCV2022 &CVPR2022论文速递2022.7.12!
- js事件循环与macroµ任务队列
- Web Spider NEX XX国际货币经纪 - PDF下载 & 提取关键词(二)
- 常见对象&内存面试题
- Python迭代器&生成器:分享贴近实际运维开发场景的小案例
- 《Drools7.0.0.Final规则引擎教程》LHS简介&Pattern详解编程语言