本次发布带来了几项重要改进和修复:
- interceptor:避免暂停期间分配堆内存。将已暂停线程的 ID 存入
GumMetalArray而不是GQueue, 可以防止已暂停线程持有dlmalloc锁时发生死锁。感谢 @mrmacete 做出这项改进。 - linux:修复缺少 ELF 时的
ModuleRegistry初始化。枚举 RTLD 通知器和已加载模块以查找DT_DEBUG条目时,我们不再假定 ELF 文件存在。这修复了程序从 memfd 加载且在没有文件的 情况下启动时的问题。 - elf-module:无法映射文件时使用实时内存。对于以 memfd 为后端的模块,如果无法映射文件, 现在会使用内存中的 ELF,而不是直接放弃。
- linux:重做 glibc pthread 内部结构检测。不再通过解析机器代码来确定内部结构, 而是启动线程,以更稳健的方式解开这个谜题。
oleavr