使用Valgrind检查StateThreads内存泄漏—SRS对StateThreads的改进与完善

这个 patch 其实是 toffaletti 贡献的,SRS 把他合并过来了,整个 commit 其实很小,我们可以直接手动把它复制过 st-1.9 项目里面的。

复制完成之后,然后只需要在编译的时候加上一个宏 MD_VALGRIND,就可以让 StateThreads 支持 Valgrind 了,如下:

ini 复制代码
make linux-debug EXTRA_CFLAGS="-DMD_VALGRIND"

其实好像不开启 MD_VALGRIND ,Valgrind 也可以检测出内存泄漏,如下:

不过协程上下文切换的时候 Valgrind 报了一个 Warning,我们开启 MD_VALGRIND 之后,这个 Warning 就会消失了。

可能是开启 MD_VALGRIND 之后,Valgrind 的检测会更准确。


下面讲一下 MD_VALGRIND 的实现逻辑,如下:

实际上就是在创建协程的时候用 VALGRIND_STACK_REGISTER 往 Valgrind 注册一下堆栈,然后退出协程的时候用 VALGRIND_STACK_DEREGISTER 销毁一下堆栈。

这两个函数的用法推荐阅读《使用和了解Valgrind核心:高级主题


这个功能相关的 issue 跟 commit 如下:

perl 复制代码
https://github.com/ossrs/state-threads/issues/2
perl 复制代码
https://github.com/ossrs/state-threads/commit/4cca7a0272b70b184742dd68065af8a9a42e030f

不过这个功能基本用不到了,SRS 现在内存泄漏使用的是 asan,不再用 Valgrind 了,推荐阅读《SRS的内存泄漏检测工具ASAN


本文是《 SRS原理 》一书中的文章,如需观看更多内容,请购买本书。

相关推荐
u13013014 天前
深入理解 M3U8 与 HLS 协议:从原理到实战解析
前端·音视频开发·流媒体·hls·m3u8
字节架构前端23 天前
媒体采集标准草案 与 Chromium 音频采集实现简介
前端·chrome·音视频开发
Tiny_React1 个月前
使用 Claude Code Skills 模拟的视频生成流程
人工智能·音视频开发·vibecoding
hk11241 个月前
【音视频/边缘计算】2025年度H.265/HEVC高并发解码与画质修复(Super-Resolution)基准测试报告(含沙丘/失控玩家核心样本)
ffmpeg·边缘计算·音视频开发·h.265·测试数据集
李小轰_Rex1 个月前
把手机变成听诊器!摄像头 30 秒隔空测心率 - 开箱即用
android·音视频开发
李小轰_Rex2 个月前
纯算法AEC:播录并行场景的回声消除实战笔记
android·音视频开发
否子戈2 个月前
WebCut前端视频编辑UI框架一周开源进度
前端·音视频开发·ui kit
SHERlocked932 个月前
摄像头 RTSP 流视频多路实时监控解决方案实践
c++·后端·音视频开发
mortimer2 个月前
Python + FFmpeg 视频自动化处理指南:从硬件加速到精确剪辑
python·ffmpeg·音视频开发
否子戈2 个月前
做中国人自己的视频编辑UI框架,WebCut正式开源
前端框架·音视频开发·视频编码