同机开着两个根目录时,关机后 netsimd.exe 可能久久不退,挡住 modavd update

Aberta
#22 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
25/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Ativa
Stack de tecnologia
android, go
Domínio
cli, devtools

Direção de pesquisa

Start by reproducing the report on Windows: run modavd start in two separate root directories, stop the instance in one, and check whether that root's netsimd.exe exits within about 15 seconds. The issue lists the steps but says the cause is not yet confirmed, so the first deliverable is evidence, not a patch. Done means the reproduction is recorded and the fix either isolates each root's emulator temp directory or documents why it is not needed, with modavd update no longer blocked by a netsimd.exe that belongs to another root.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

bug P3 platform:windows

现象

0.36.0 的包升级回归里有一次:modavd stop 关掉实例以后,根目录下的 netsimd.exe 过了 90 秒还在,升级那一项因此判失败,重跑通过。平时关机后十几秒它就自己退了。

对用户的影响:modavd update(以及 AUTO-MAS 换包)发现 sdk\emulator 下还有进程在跑,就什么都不动、报「还有程序在用模拟器或管理器的文件:netsimd.exe(pid …)」。这时实例都关了,用户不知道该关什么。

当时的判断(没坐实)

证据只留了一部分。推测是:同一台电脑上同时跑着几个根目录的模拟器(回归时有测试根目录和生产根目录),它们共用同一个 netsim 发现目录(在 %TEMP% 下),别的根目录的模拟器连上了这个根目录的 netsimd.exe,它就一直不退。

回归脚本那边已经给自己起的模拟器单设了 TMPDIR,之后没再碰到。产品里还没处理:同机开着两个 ModAVD 根目录(或者开发用的 SDK)时就可能碰上。

要做的

  1. 先坐实:两个根目录 A、B,各开一台实例,关掉 A 的实例,看 A 的 netsimd.exe 退不退、B 的模拟器连的是哪个 netsimd.exe。
  2. 坐实了就让每个根目录的模拟器只连自己的 netsimd.exe,比如 modavd start 给模拟器进程单设一个本根目录下的临时目录。改之前确认蓝牙、Wi-Fi 和别的用到临时目录的地方不受影响。
  3. modavd update 碰到只剩本根目录的 netsimd.exe、而本根目录没有实例在跑时,先等它退出一会儿(比如 60 秒)再报错;报错时说清楚是哪个根目录的模拟器还连着它。

验收

  • 两个根目录同时各开一台实例,关掉其中一个根目录的实例后,它的 netsimd.exe 照常十几秒内退出;
  • 这时对它执行 modavd update,不再因为 netsimd.exe 被拦下;
  • 只开一个根目录时,开关机和网络行为不变。
Linguagem predominante
Go
Estrelas
0
Forks
1
Merge médio
2h 42min
PRs com merge (30d)
13

Preparar o ambiente

Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de ModAVD/ModAVDManager

Todas as issues de ModAVD/ModAVDManager

Issues semelhantes

Mais issues de Go

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.