Solução para erro no git do windows (Error: Could not fork child process: Resource temporarily unavailable (-1).)

Já fazia alguns meses desde que usei o git extensivamente no windows a última vez. Essa semana precisei usar e, para minha surpresa, alguma atualização do windows quebrou o git.

Ok, pesquisei bastante e descobri que esse problema não é exclusivo meu e tampouco novo(2016, 2017), mas aparentemente o problema é intermitente. Então, vou compartilhar aqui o erro e a solução:

O problema é o seguinte:

  • Ao tentar executar o bash é apresentada a mensagem de erro: Error: Could not fork child process: Resource temporarily unavailable (-1).

  • Ao tentar criar uma nova branch ou usar o gitflow, é apresentado o erro: fatal error - cygheap base mismatch detected - <endereço de memória>.

Esse erro ocorre no windows 10 - 64 e somente se o recurso Force randomization for images (Mandatory ASLR) estiver ativado (o que é por padrão por motivos de segurança).

A solução então é adicionar os arquivos do bash usados pelo git na exceção desse recurso, mas o número de arquivos é grande e a interface só aceita adicionar os arquivos um a um, então podemos usar o powershell para resolver o problema.

Solução em powershell:

Supondo que o git esteja instalado em C:\Program Files\Git, o seguinte script adiciona todos os arquivos necessários na exceção do ASLR:

$files = (Get-ChildItem 'C:\Program Files\Git\usr\bin\*.exe').FullName
$files.ForEach({Set-ProcessMitigation $_ -Disable ForceRelocateImages})

Esses comandos são simples, o primeiro cria uma variável $files com o endereço completo de todos os executáveis da pasta.
O segundo adiciona à lista de exclusão do ASLR os arquivos da variável.

Fonte:
Essa solução foi proposta pelo pessoal do Mintty em 2017 e se mantém útil até hoje, inclusive sendo indicado como solução no issues do git.
Proposição da solução e explicação do ASLR no issues do Mintty
Pessoal sugerindo essa solução no issues do git

2 curtidas

Criei uma conta só para dizer te amo, <3, resolveu aqui

3 curtidas

Renard162, do fundo do meu coração, eu te agradeço. Eu nunca te verei pessoalmente, e você provavelmente está a milhares de quilômetros de mim enquanto escrevo essa mensagem. Você é um ser humano, com sua própria vida interessante, e histórias, valores e experiências. Mas eu nunca te conhecerei pela pessoa que você verdadeiramente é. E tá tudo bem. Nem todos relacionamentos precisam durar a vida inteira. Mas neste momento fugaz, você está nos meus pensamentos, Renard162, porque você é f0d4. Você, um completo estranho, me ajudou, sem pedir recompensa nem reconhecimento. Você não busca fama, tampouco busca poder. Mas você faz do mundo um lugar melhor. Eu passei DIAS tentando descobrir como resolver esse problema com o Git Bash no meu Windows. Eu achava que precisaria de alguma solução mirabolante, e todas as que testei antes não tinham servido, era frustrante e irritante. Cada vez que eu tentava abrir o terminal, eu me incendiava. Ele sugou minha própria alma. Mas, Renard162, depois de seguir suas instruções, você mudou a minha vida. Eu consegui automatizar essas permissões com facilidade, e agora sou outra pessoa, novinha em folha, que pode versionar códigos e até um poema de agradecimento se quiser, e poderei focar minha atenção em problemas maiores nesse planeta. Me ajudando, Renard162, você fez deste mundo um lugar melhor, e eu, uma pessoa melhor. Agradeço a você novamente. Seja honesto, se orgulhe, meu amigo. Não acredito em deus, mas que deus te abençoe, Renard162.

2 curtidas