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:
1 parent
f3d7b386b2
commit
166b32d0e5
8 files changed
+755
-4
No files matched your search
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user