From 6d1189eadc2a876fadb9da04c22ed7dbfc0d2571 Mon Sep 17 00:00:00 2001 From: MeowOS Date: Mon, 31 Aug 2026 19:38:33 +0800 Subject: [PATCH] =?UTF-8?q?fix(amsd):=20launcher=20=E9=87=8D=E5=90=AF?= =?UTF-8?q?=E5=90=8E=20amsd=20=E5=A4=B1=E8=81=94=E4=B8=89=E4=BF=AE=20?= =?UTF-8?q?=E2=80=94=20am=20=E5=91=BD=E4=BB=A4=E8=BF=9E=E6=8E=A5=E8=A2=AB?= =?UTF-8?q?=E9=99=88=E6=97=A7=20revents=20=E6=8F=90=E5=89=8D=E5=85=B3?= =?UTF-8?q?=E9=97=AD/ipc=5Fxchg=20=E6=97=A0=E8=B6=85=E6=97=B6=E5=86=BB?= =?UTF-8?q?=E7=BB=93/=E6=97=A0=E8=87=AA=E5=8A=A8=E9=87=8D=E8=BF=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit launcher 重启后 am start/kill (MSG_AMS_START/KILL 0x00A0/0x00A1) 不再转发到 launcher。 根因(均在 meow_amsd.c,launcher 无需改): ① am 命令连接被提前关闭(真根因):poll 循环 pfds[] 每圈未清零,上一连接关闭残留的 POLLHUP/POLLERR 落在 pfds[2+i];accept 后同圈用陈旧 revents 处理新连接 → 误判 HUP/ERR 提前 close(am 收 SIGPIPE/141)。launcher 重启后 EV 事件连接密集、每条约关闭 → 必触发。 修:每圈 memset(pfds,0,sizeof pfds),新连接当轮 revents=0、下轮才处理。 ② ipc_xchg 无收发超时 → 阻塞 read 冻结整个单线程 amsd(launcher 接受但不回包窗口)。 修:设 SO_SNDTIMEO/SO_RCVTIMEO(tv_usec<1000000,否则 setsockopt 返 EINVAL 静默失效)。 ③ ams_request_ctl 加指数短退避重试(2 次,250ms 基数),launcher 数秒内回来即自动恢复。 验证(宿主端到端):假 launcher 杀→重启 am start 恢复 OK;注入多条 EV 后 am list×10 全 exit=0(无 141);哑 launcher(接受不回包)am start ~2s 有界返回 ERR 且 amsd 存活可继续 am list。meow_amsd mipsel md5 c6c2eda2d63ac73c4b6fac29008e0c9b(am 不变 d687d8bc)。 不动 launcher/sdk/根目录文档。 --- patch_v2/meow_amsd/meow_amsd | Bin 131100 -> 132492 bytes patch_v2/meow_amsd/meow_amsd.c | 40 ++++++++++++++++++++++++------ patch_v2/meow_amsd/meow_amsd_host | Bin 76496 -> 76560 bytes 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/patch_v2/meow_amsd/meow_amsd b/patch_v2/meow_amsd/meow_amsd index 741b9d150275577dd474f4be7b4e60949f0a7faf..9330bbea4c33d36eacf38ca0ec4d272d5bdb49b7 100755 GIT binary patch delta 30916 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 bv5jz9{YB+%MEm~(1`oMA diff --git a/patch_v2/meow_amsd/meow_amsd.c b/patch_v2/meow_amsd/meow_amsd.c index 5023a70..f07f694 100644 --- a/patch_v2/meow_amsd/meow_amsd.c +++ b/patch_v2/meow_amsd/meow_amsd.c @@ -65,6 +65,9 @@ #define AMS_SOCK_PATH_MAX 108 #define AMS_BOOTTS_LEN 64 #define AMS_REQ_MAX 512 /* 命令响应缓冲 */ +#define AMS_IPC_TIMEOUT_MS 1200 /* launcher IPC 单次收发超时:amsd 绝不为一次转发阻塞无限久 */ +#define AMS_IPC_RETRY 2 /* launcher 一次性不可达/超时 → 短退避重连一次 */ +#define AMS_IPC_BACKOFF_MS 250 /* 重连退避基数 */ /* 每 App 状态(一期:STOPPED/FG;BG 预留二期) */ enum { AMS_STOPPED = 0, AMS_FG = 1, AMS_BG = 2 }; @@ -735,6 +738,15 @@ static int ipc_xchg(uint16_t type, const void *payload, uint32_t len, { int fd = socket(AF_UNIX, SOCK_STREAM, 0); if (fd < 0) return -1; + /* 收发加超时:launcher 刚刚重启/主循环未就绪(接受但不回包)时,amsd 的阻塞 + * read 会永远挂起,冻结整个单线程守护。设 SO_SNDTIMEO/SO_RCVTIMEO 让单次转发 + * 有界,超时即返回失败 → ams_request_ctl 退避重连,绝不无限阻塞。 + * 注意:tv_usec 必须 < 1000000(否则 setsockopt 返回 EINVAL,超时静默失效)。 */ + struct timeval tv; + tv.tv_sec = AMS_IPC_TIMEOUT_MS / 1000; + tv.tv_usec = (AMS_IPC_TIMEOUT_MS % 1000) * 1000; + (void)setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof tv); + (void)setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof tv); struct sockaddr_un a; memset(&a, 0, sizeof a); a.sun_family = AF_UNIX; @@ -781,18 +793,25 @@ static int ipc_xchg(uint16_t type, const void *payload, uint32_t len, return (int)rtype; } -/* 向 launcher 申请 start/kill。返回 0=launcher 回 code(a_out 输出);-1=launcher 不通。 */ +/* 向 launcher 申请 start/kill。返回 0=launcher 回 code(a_out 输出);-1=launcher 不通。 + * launcher 重启窗口(svcd/sysui 重启 launcher、或 amsd 先行启动)内连接会暂不可达/超时: + * 这里做「指数式短退避重试」——launcher 数秒内回来即自动恢复转发(无需人工重发)。 */ static int ams_request_ctl(uint16_t type, const void *payload, uint32_t len, uint32_t *code) { uint8_t rbuf[64]; - int rt = ipc_xchg(type, payload, len, rbuf, sizeof rbuf); - if (rt == MSG_ACK) { - m_ack_t a; - memcpy(&a, rbuf, sizeof a); - if (code) *code = a.code; - return 0; + for (int attempt = 0; attempt < AMS_IPC_RETRY; attempt++) { + int rt = ipc_xchg(type, payload, len, rbuf, sizeof rbuf); + if (rt == MSG_ACK) { + m_ack_t a; + memcpy(&a, rbuf, sizeof a); + if (code) *code = a.code; + return 0; + } + if (rt == MSG_ERR) return MEOW_ERR_INTERNAL; + /* 一次连接失败/超时(launcher 未就绪)→ 短退避再试;仍失败则返回 -1。 */ + if (attempt + 1 < AMS_IPC_RETRY) + usleep((useconds_t)(AMS_IPC_BACKOFF_MS * (attempt + 1)) * 1000); } - if (rt == MSG_ERR) return MEOW_ERR_INTERNAL; return -1; } @@ -1364,6 +1383,11 @@ static int run_daemon(void) unsigned long long last_cleanup = 0; while (!g_shutdown) { + /* 每圈清零:谨防上一轮已关闭连接残留的 POLLHUP/POLLERR 落在 pfds[2+i] 上。 + * 若不清,accept 后同一轮就用「陈旧 revents」处理新连接——误判其 HUP/ERR + * 而提前 close(am CLI 收到 SIGPIPE、命令被丢弃),launcher 重启后 EV 事件 + * 连接密集必触发,表现为 `am start` 不再转发到 launcher。 */ + memset(pfds, 0, sizeof pfds); pfds[0].fd = g_listen_fd; pfds[0].events = POLLIN; pfds[0].revents = 0; pfds[1].fd = g_sigpipe[0]; pfds[1].events = POLLIN; pfds[1].revents = 0; for (int i = 0; i < nfds - 2; i++) { diff --git a/patch_v2/meow_amsd/meow_amsd_host b/patch_v2/meow_amsd/meow_amsd_host index 4ae18268c30a0051c6a660e239155946fe8ccc54..16be5e3e6a9a111f0479fa91beabd88809ae24dd 100755 GIT binary patch delta 14342 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 delta 13902 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