修复E-03:s_net_errno 改按任务隔离槽位,消除跨任务错误码错报
This commit is contained in:
+216
-201
File diff suppressed because it is too large
Load Diff
@@ -261,8 +261,18 @@ int net_set_event_cb(int sockfd, net_event_cb_t cb, void *arg);
|
||||
*/
|
||||
|
||||
/*
|
||||
* 函数功能:获取 socket 最后错误码
|
||||
* 返回值:错误码(NET_ERR_xxx)
|
||||
* 函数功能:获取 **本任务** 最后一次 net_*() 调用失败时的精确错误码
|
||||
* 入口参数:无
|
||||
* 出口参数:无
|
||||
* 返回值:错误码(NET_ERR_xxx);本任务尚无失败记录时为 NET_OK(0)
|
||||
* 限定条件:无(任何上下文可调用,含中断——查询为纯本任务索引读)
|
||||
* 函数说明:1. **按任务隔离**(2026-09-25 E-03 修复):错误码存在每个任务自己的
|
||||
* 槽位里,任务间互不干扰,不存在跨任务覆写竞态——旧实现的单一全局
|
||||
* 变量会被 netTask/其他任务的 net 调用交错覆盖,调用方可能读到别人的码
|
||||
* 2. 语义:本任务最后一次返回 -1 的 net_*() 调用所对应的精确码;
|
||||
* 调用成功时**不清零**(与本 API 历史行为一致,保持向后兼容)
|
||||
* 3. 任务句柄槽位用尽时回退到共享槽位(仅影响排障,不影响功能)
|
||||
* 4. 超时类场景(net_recv_to)请直接用返回码 -2 判定,不要依赖本接口
|
||||
*/
|
||||
int net_get_errno(void);
|
||||
|
||||
|
||||
+1
-1
@@ -27,4 +27,4 @@
|
||||
| # | 事项 | 说明 | 出处 |
|
||||
|---|---|---|---|
|
||||
| N-4 | **pending 机制二期:ACCEPT + SEND 阻塞路径 pending 化**——E-06(accept 轮询计时失真)、E-20(lftpd 控制通道 errno 分类/501)、E-21(timeSync errno 分级)剩余分量共用该机制扩展;届时 L3/L5 基线再重锁、探针族扩充(close/reconfig/EOF/disconnect-during-pending)、看门狗接 selftest 留痕、模拟器差距清单 +1 | 一期(RECV)已落地:`f16dc9a`;设计基线与门禁结果见 `docs/问题记录/Net层阻塞模型业界对照与演进方案.md` §6.7 | 同左 + `错误码传播审计.md` 第二档 #1 |
|
||||
| N-5 | E-03(`s_net_errno` 跨任务覆写竞态)——pending 化不改变 errno 通道现状;与 N-4 二期或独立小修(错误码经通知值直回,包装器去全局) | 既有 P1 | `错误码传播审计.md` E-03 |
|
||||
| N-5 | **✅ 已修复(2026-09-25):E-03 `s_net_errno` 跨任务覆写竞态**——采取"**按任务隔离**"路线(而非二期 pending 化):删除全局 `s_net_errno`,改为 `s_net_errno_slots[8]`(每槽 `{任务句柄, err}`);`net_errno_slot()` 无锁快路径只读命中本任务槽、首次占用在 `taskENTER_CRITICAL` 内复查(槽位用尽回退 [0] 槽,**不新增共享槽**以免把竞态带回来);`net_set_errno()` 取代全部赋值、`NET_ERR_RETURN_1()` 宏合并"记码+return -1"共 82 处;`net_get_errno()` 改读本任务槽位、**对外语义不变**(成功不清零)。构建 0 错 0 警 + cppcheck 无告警 + `git diff --check` 干净 + 编码无 `U+FFFD`,BSS +64B。**残留台架项**:本机 COM6 未枚举(ST-Link 虚拟串口不在)→ 硬件闭环回归待补(`错误码传播审计.md` §3.1 E-03 / 页脚) | 2026-09-25 修复 | `错误码传播审计.md` E-03;`Drivers/BSP/NET/net_socket.c`(`net_errno_slot` / `net_set_errno` / `net_get_errno`) |
|
||||
|
||||
+527
-477
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user