第一百一十章 面包屑
第二天上午九点,麦景行先发来消息。
「情况查到了,魏磊还在泉华,但三周前从 G1 组转岗了,现在在移动平台那边。」
「项磊帮你查的?」
「走了一下内部通讯录,转岗记录可以查到。联系方式也有,但项磊说这个人不太接陌生消息,建议先让项磊打个招呼。」
他给项磊发:「告诉魏磊,有人想跟他聊 `common/err_handle.h` 的事,就是想了解当时的情况,没有其他目的。」
二十分钟后,项磊回:「他说可以,你直接加他。」
微信通过之后,他没有立刻发消息,等了几分钟,然后发过去。
「你好,我是陆衍,云帆做注释的那边。」
「嗯,」对方回得很快,「项磊说是关于一个老文件的问题。」
「是 `common/err_handle.h` 里的一行 TODO,5 月 12 日的提交,你加的。」
对方没有立刻回复。沉默了将近一分钟。
「云帆在查这个文件?」
「做 G1 的代码注释,进来之后发现那行 TODO,想知道背景。」
「那个文件是 BasePlatform 的,」对方的语气很平,「我只是路过加了一行记号,没有修改别的东西。」
「`common/err_handle.h`,5 月 12 日,下午两点四十七分。」他直接报出来,「`set_system_fault` 函数声明前面,一行 TODO,`verify isolation context before fault propagation`。」
对方没有立刻回。

「你查了文件头,」魏磊发过来,「1997 年的那个?」
「1997 年,`Platform Infrastructure Layer v1.2`,邓明海他们写的。三次旁路激活记录我也看过,每次都是正常路径退出,从来没有走到 ERR_HANDLER。你加那行 TODO,当时看到了什么?」
这次停顿更长,差不多两分钟。
「查得挺细的。」
「做注释是本分。」
「好,」魏磊发过来,「那我说一下当时的情况。」
「4 月底,G1 收尾验收,跑最后一轮集成测试。有个场景是同时模拟 G1 旁路激活和 G2 recovery 失败,两个信号几乎同时进来。」
「在测试环境里,这个场景触发了一个没预期到的行为。两边同时调 `set_system_fault`,一边进去的时候内存锁还在,另一边进去的时候锁已经释放了。没有崩,但函数里的状态写入顺序出了问题,退出码是一个我不太理解的值。」
用人话说就是:两条停机信号同时打进来,进去的顺序乱了,设备可能停在一个说不清楚状态的地方。
「当时有没有记录这个测试结果?」
「记在本地了,没有提交到测试日志。当时判断是极端并发场景,真实设备上很难复现,自己也不确定是不是真的有问题。」
「报给谁了吗?」
「告诉了 G1 的技术负责人,谢刚。他的意思是 G2 是另一个合同,G1 收尾不负责 G2 的行为,这个场景超出了我们的测试范围,不需要写进我们的报告里。」
「他有没有说会把这个情况向上说?」
「没说,我也没问。」魏磊停了一下,「他当时的态度就是让我别管这个,把 G1 收尾跑完。加那行 TODO 是因为我总觉得这事不对,但不知道该走哪条路,就留了个记号。」

「给谁留的?」
「自己也不知道。」
「从 G1 转出来是三周前?」
「嗯,项目关了,分到移动平台组。」
「转出来之前有没有再跟进那行 TODO?」
「去看过 G2 那边的代码,想确认那个并发场景到底有没有实际风险,但 G2 的源码没有权限,就停了。」
在脑子里过了一遍。
G1 工程师,发现了跨模块问题,报给了上级,被告知不在范围,没有 G2 权限自己验证,留了一行 TODO,转岗。这条链里每一步单独看都是合理的,但整体是一个把问题推到下游的过程,推到了什么都没收到的那一边。
「那位技术负责人现在还在泉华吗?」
「三个月前离职了,G1 合同结束之后去了别的公司。」
谢刚离职,项目关掉,发现问题的人转岗,唯一留下来的是那行 TODO。
「最后一个问题,」他发过去,「你说你去看过 G2 那边。G2 有没有人主动联系过你,问同样的问题?」
停顿了一会儿。
「有。大概两个月前,G2 那边叫陈朗的,也发现了 `set_system_fault` 被两边同时调的情况,给我发过消息,问 G1 有没有关注过。」
「怎么回他的?」

「告诉他我也注意到了,让他去找 BasePlatform 那边问。他后来没有再联系我。」
两个人,从两边独立发现了同一个问题,碰了一次头,都停了。
「帮了大忙,」他发过去,「不会牵扯到你。报告里只写技术发现,不写名字。」
魏磊回:「行,没问题。就是如果方总那边联系我,到时候我怎么说?」
「照实说,你加了 TODO,因为发现了一个跨模块的并发问题,报过谢刚,结果不了了之。这是实情,没什么不能说的。」
「好。」
对话截图发给麦景行,加了一条:「G2 那边还有一个叫陈朗的,两个月前也发现了同样的问题,跟魏磊碰过一次,然后也停了。你能查到这个人吗?」
麦景行沉默几分钟,回:「G2 的模块我有权限,但人员不清楚。让项磊走一下?」
「让项磊查,另外给乔木发一份整理。」
乔木看完,将近三分钟没有回。
「比我们最开始以为的要复杂很多。」
「是。」
「谢刚离职了,有没有跟方晓晨说过这件事,没有可以核实的记录。两个人都不知道。」
「得直接去问方晓晨了。」
「这周见她的时候,先把陈朗那边问完,再开口。」乔木发过来,「别让她知道我们掌握了多少,要比她知道的多一步,但别全摊开。」

那句话看了两遍。
乔木做商务这些年,说话有时候比他直接得多。
下午三点,项磊发来:「陈朗还在泉华,G2 维护组,负责 `recovery_handler.c` 那块的更新。」
然后附了一条:「陆哥,这两个人你都联系了?」
「魏磊联系了,陈朗还没有。」
「方总那边,什么时候去?」
他想了一下。「这周内,但要先把陈朗问清楚。」
「行,我去跟陈朗打个招呼。」
项磊停了一下,又发来:「陆哥,这个事,是不是比你们最开始预想的大一些?」
那个问题看了几秒。
「大一些。」
又过了一会儿,项磊再次发来消息。
「刚才问陈朗的时候,他提到了一件事——他当时在 `recovery_handler.c` 里写了一段注释,专门记录了这个并发场景,但后来被要求删掉了。」
「谁要求的?」
「他没说,就说被要求了。」