Mais um erro causado pela Microsoft

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mais um erro causado pela Microsoft

Mensagem por JoséQuintas »

Antes de mais nada, estou postando aqui porque justamente aonde tenho erro é no uso relacionado ao Harbour.

É mais uma esquisitice da Microsoft.
Aqui tenho 8GB de memória, na grande maioria do tempo quase tudo disponível.
O erro é not enough memory for thread data

O que deu pra perceber é:
Tudo que é acessado no HD passa a fazer parte do cache, então cada vez tem mais memória em uso.
Quando faço cópia entre dois HDs, é aí que a coisa pega.
O erro vém depois, no uso do GIT ou geração/compilação do Harbour - no msvc.
Nesse caso, é reiniciar a máquina pra liberar a memória usada pelo cache.

Por pesquisa no google, o que encontrei é que foi criada uma nova função de API pra liberar memória.
Então se o programa chama a rotina antiga, pode não estar liberando memória suficiente.

Aqui um texto da Microsoft, mencionando a "nova" chamada de liberação de memória.

https://msdn.microsoft.com/en-us/library/d509d9f9.aspx

Se até o compilador C da Microsoft dá esse erro.... relatar o que pra quem?

Ainda bem que é eventual, e que já sei como resolver: reiniciando a máquina.
We recommend that an executable that calls the C run-time library (CRT) should use _beginthreadex for thread creation rather than the Windows API CreateThread. _beginthreadex initializes internal static storage used by many CRT functions in thread local storage. If you use CreateThread to create a thread, the CRT may terminate the process with R6016 when a call is made to a CRT function that requires initialized internal static storage.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mais um erro causado pela Microsoft

Mensagem por JoséQuintas »

Dei uma pesquisada nos fontes do Harbour.
Encontrei isto:

Código: Selecionar todos

#  if defined( HB_THREAD_RAWWINAPI )
      th_h = CreateThread( NULL, 0, start_func, Cargo, 0, th_id );
#  else
      th_h = ( HANDLE ) _beginthreadex( NULL, 0, start_func, Cargo, 0, th_id );
#  endif
Depois pesquisei HB_THREAD_RAWWINAPI e não encontrei em lugar nenhum.
Significa que, por padrão, o Harbour já faz a parte dele, já que para a primeira parte do IF acontecer, precisa disso definido em algum lugar.

Então... só resta reiniciar a máquina após acessar gigabytes de informação.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Mais um erro causado pela Microsoft

Mensagem por Toledo »

JoséQuintas escreveu:Depois pesquisei HB_THREAD_RAWWINAPI e não encontrei em lugar nenhum.
... já que para a primeira parte do IF acontecer, precisa disso definido em algum lugar.
Foi definido no arquivo hbthread.h que está na pasta \INCLUDE do Harbour.

Depois este arquivo é incluído no thread.c :

Código: Selecionar todos

#include "hbthread.h"
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mais um erro causado pela Microsoft

Mensagem por JoséQuintas »

Tem razão, esqueci dos arquivos H que atendem o C.
Depende de certas condições pra ativar/desativar.
E se entendi direito, a partir do msc 15.0 já usa do jeito novo.
Aqui uso do vs 2010, que é 16.0.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Mais um erro causado pela Microsoft

Mensagem por Poka »

Olá,

Toledo, José Quintas
Esses comandos aí resolveria o problema da mensagem "PROGRAMA NÃO RESPONDENDO", me parece que é problema de memoria, no meu computador tenho só 2 g, mas tem empresa de 4 g que também acontece. Uso o Harbour versão 3.2.0 (r 1504082220).
Se não, vocês poderiam me dar uma luz para resolver isto.

Obrigado

Poka
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mais um erro causado pela Microsoft

Mensagem por JoséQuintas »

Não tem a ver.
Às vezes essa mensagem é porque o programa entrou em LOOP, e não tem Inkey() dentro do loop.
Tipo... do while .not. eof(), enddo e esqueceu do skip.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
rossine
Usuário Nível 3
Usuário Nível 3
Mensagens: 325
Registrado em: 06 Ago 2007 09:57
Localização: Divinópolis-MG

Mais um erro causado pela Microsoft

Mensagem por rossine »

Olá pessoal,

Há alguns dias eu também estou recebendo esta mensagem quando vou emitir uma nf-e:

not enough memory for thread data

Será que usando hb_gcall( .t. ) poderia resolver este problema ? ou teria alguma outra solução ?

Eu estou usando mingW32 e harbour 3.4.0.

Obrigado,

Rossine.
Rossine.

Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mais um erro causado pela Microsoft

Mensagem por JoséQuintas »

O que eu percebi é que tem a ver com memória cache.
memoria.png
Repare:
Mostra 5.6GB disponível, mas 1.5GB livre.
4.1GB está sendo usado como cache, e pode ser liberado a qualquer momento.
Quando acontece o erro aqui, a memória livre está bem baixa, e a usada como cache bem alta, geralmente após cópia de HD, ou durante a geração do Harbour onde tudo que é usado vai ficando em cache, ou durante o uso do GIT.

A impressão que tenho é que essa "liberação" depende da nova chamada.
E o erro é justamente quando está sendo usado multithread, coisa comum do GIT e default do Harbour 3.4.

Se fosse arriscar um chute, talvez algum parâmetro na chamada da função, ao invés de zero.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mais um erro causado pela Microsoft

Mensagem por JoséQuintas »

Como deixei de ser o único a ter o erro, relatei no Harbour.
Aqui o erro é eventual.
Talvez seja uma ocorrência nova pra 64 bits, com o Windows querendo tirar proveito de toda memória pra cache.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mais um erro causado pela Microsoft

Mensagem por JoséQuintas »

Rossine, relatei no Harbour e o Viktor pediu mais detalhes, incluindo situação, número do erro e texto exato do erro.

https://github.com/vszakats/harbour-cor ... -118670580

Vou tentar forçar o erro aqui, copiando HDs, atualizando Harbour, gerando Harbour, etc....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mais um erro causado pela Microsoft

Mensagem por JoséQuintas »

Ainda não consegui fabricar o erro.
Mas consegui usar muito cache.
memoria.png
5.5GB de memória disponível, mas mostrando 5MB de memória livre.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
rossine
Usuário Nível 3
Usuário Nível 3
Mensagens: 325
Registrado em: 06 Ago 2007 09:57
Localização: Divinópolis-MG

Mais um erro causado pela Microsoft

Mensagem por rossine »

Olá José,

Eu reparei que o cache de minha máquina também está praticamente esgotada. Teve um momento que ficou no 0.

O erro que ocorre aqui, aparece uma janela do windows com estes dizeres:


Microsoft Visual C++ Runtime Library

Runtime Error!

Program: C:\Windows\Microsoft.NET\Framework\v2.0.50727\cvtres.exe

R6016
- not enough space for thread data


Vamos ver se o Viktor nos dá alguma dica sobre o que pode estar causando este problema.

Continuo procurando algo a respeito deste erro. Qualquer novidade lhe informo.

Obrigado,

Rossine.
Rossine.

Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mais um erro causado pela Microsoft

Mensagem por JoséQuintas »

Achei estranho na sua mensagem mostrar a pasta do NET Framework.

No meu caso mostra como GIT.EXE ou CL.EXE, e acontece durante a geração do Harbour ou atualização dele.
Exatamente duas situações que fazem uso de multithread.

Como eu disse, aqui é eventual.
Nos meus testes forçados chegou a 0 de memória livre, e nem assim ocorreu o erro.

Pelo que entendi num dos links:
- Pode ser definido no programa principal, e reutilizado pelos módulos, sem limites, pois conta como 1 uso.
- Caso seja definido em cada módulo, cada módulo conta como 1, e tem limite.
- E caso um segundo programa utilize também para cada módulo, o limite para o segundo programa será menor.
- O limite só é zerado quando nenhum programa fizer uso desse arquivo, e ele for retirado da memória.
- E isso também pode estar relacionado a outras DLLs utilizadas pelo aplicativo, que fizerem referência a esse arquivo.

Resta identificar se o erro foi causado pelo Harbour, pelo aplicativo, ou por alguma dll adicional.

É o tipo de erro que começa conforme o aplicativo vai crescendo e usando mais recursos.

Me fez pensar do porquê inventaram o NET Framework: pra limitar todas as referências do aplicativo e DLLs a uma só.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
rossine
Usuário Nível 3
Usuário Nível 3
Mensagens: 325
Registrado em: 06 Ago 2007 09:57
Localização: Divinópolis-MG

Mais um erro causado pela Microsoft

Mensagem por rossine »

Olá Kapiaba,

Nos links citados, fazem referência a uma função em c++, eu teria que inserir este código C++, dentro de minha aplicação ?

Obrigado,

Rossine.
Rossine.

Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Responder