feat(watchdog): M52 资源压力可观测 + multi_font 日志去刷屏 + audiod bind 失败即退

- watchdog(新 wd_resguard.h + meow_watchdog.c):每 10s 采 /proc/meminfo
  (MemFree/MemAvailable)、进程总数、单父进程子进程数前 5 名;过阈值时向
  MeowOS/logs 打 RESGUARD 告警,带等级/命中规则/进程名+PID 名单。零 fork、零堆分配、
  不发任何信号(只报警)。阈值依据 = 真机实测 56872kB / 空闲 100 进程 / maxch=11,
  推导写在 wd_resguard.h 文件头;日志只在等级跃迁或同态每 5 分钟复述。
- launcherd:multi_font 那行「每 2s 无条件打一条」改为只在配置签名跃迁时打
  (新 mf_logsig.h 纯函数 + test_mf_logsig 宿主单测,接进 build_launcher.sh test)。
  真机 6603 行日志里该行占 5297 行(80%)。
- audiod:io bind 失败不再只记一行就 return(旧行为让主线程 watchdog 空转 720s、
  客户端全 ECONNREFUSED),改为明确报错 + g_stop 干净退出;仅动 io_thread 一个 hunk。
This commit is contained in:
AskaEth committed 2026-11-12 08:02:22 +08:00
1 parent f3d7b386b2
commit 166b32d0e5
8 files changed
+755 -4

No files matched your search

+9 -1
View File
@@ -2025,8 +2025,16 @@ static void *io_thread(void *arg)
snprintf(a.sun_path, sizeof a.sun_path, "%s", g_sock);
unlink(g_sock);
if (bind(lfd, (struct sockaddr *)&a, sizeof a) != 0) {
logmsg("io: bind %s: %s", g_sock, strerror(errno));
/* M52:bind 失败 = IO 线程根本没起来。旧实现只记一行就 return,主线程的 WATCHDOG
* 于是每 30s 报一次 "io thread silent"、客户端全 ECONNREFUSED,守护既不可用也不退出
* (M50 真机把 socket 放到 SD 卡 FAT 上 → EPERM,空转 720s)。现在明确报错并**干净
* 退出**(g_stop=1 → main 走正常 shutdown、退出码 0):svcd 的 restart=on-fail 不会把
* 它当崩溃重拉(max_restart=5),也不会再有线程假装在服务。
* AF_UNIX socket 必须落在本地可写 FS(/tmp);FAT/exFAT 不支持 unix socket。 */
logmsg("io: bind %s: %s -> FATAL (AF_UNIX socket must be on a local FS like /tmp, "
"FAT/exFAT is unsupported); exiting", g_sock, strerror(errno));
close(lfd);
g_stop = 1;
return NULL;
}
chmod(g_sock, 0666);