Feature: 修改用户态进程锁保护
,替换为定长数组 PidSlot slots[MAX_PID_SLOTS]; 每个 PidSlot 维护原子状态机(FREE→RESERVED→INUSE→REMOVING)实现无锁增删; 读路径无锁扫描槽位,回收由最后释放引用者执行; 读路径(如 BuildAllProcessPayload)改为 PidSlotCollectRefs 批量取引用后访问,共 8 个文件、+656/-431 行; 状态机转换使用 EnvAtomicCmpAndSwap,消除全局锁瓶颈,提升并发吞吐与扩展性, 主要变更: 移除 ProcessManager.lock 全局锁与 ProcessAttr *processes 链表。
替换原 LinkedListAdd/LinkedListRemove; 同步更新 smap_config.c、smap_interface.c、scene.c、migration.c、oom_migrate.c、smap_inner_interface.c 等调用方,命中后通过引用计数安全访问。
该PR关联的issue fixes #193 希望检视人员了解: 改动集中在 plugins/smap/src/user/ 目录,结束时统一 PidSlotReleaseRefs; 请重点关注 PidSlotRemove 与 PidSlotTryReclaim 的回收时序,加该 pid 的 attrLock 读写,引用计数采用 CAS fetch_add/sub,以及 scene.c/migration.c 中读路径引用计数配对是否完备, 当前PR是否有AI参与: [x] 否 [] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : 参考:openEuler社区《生成式AI工具使用与开源贡献政策》 PR功能描述 / 为什么需要这个合入: 将 SMAP 用户态进程管理从全局 mutex + 链表重构为槽位数组 + 原子状态机 + 每 pid 细粒度锁 + 引用计数延迟回收,。
避免 use-after-free; 结构体 __attribute__((aligned(64))) 避免多槽位假共享; 新增 API:PidSlotInit/Destroy/Add/Remove/GetRef/CollectRefs/ReleaseRefs/PutProcessAttr。
评论列表