Árvore de páginas

Melhoria - Ocorrência e tratamento de stack overflow

Esta build contém uma proteção adicional para uma ocorrência crítica de falta de memória de stack em processamento de programas.

 

Situação

Utilização de programas AdvPL, onde intencional ou acidentalmente houve recursividade de código (a função chamando ela mesma, aumentando a pilha de chamadas - stack).

Ocorrência

Caso a memória interna do TOTVS | Application Server, destinada à alocação de pilha (stack), fosse inteiramente ocupada antes do limite de itens de chamada de função ( fixo em 200 níveis ) fosse atingido, a aplicação "congelava", mostrando no Log de console do TOTVS | Application Server a mensagem abaixo : 

**************************************** *** Stack Overflow found *** *** theThreadProc -DoExecute() *** **************************************** 

Adicionalmente, os recursos deste processo ficavam retidos, sem que a memória e recursos utilizados fossem liberados, podendo causar outras instabilidades no ambiente.

O comportamento esperado numa condição desta natureza deveria proteger a execução de código, disparando uma ocorrência de erro fatal AdvPL antes do limite interno de memória de stack ser atingido.

Melhoria

Implementada proteção no kernel de execução de programas AdvPL, para verificar a cada novo item na pilha de funções se a memória interna reservada para stack da aplicação ultrapassou os 90% de ocupação. Em caso afirmativo, a aplicação será finalizada com a ocorrência de erro fatal AdvPL "stack memory overflow", antes da memória interna ser esgotada.

Informações adicionais
  • Para que não existam equívocos sobre os diferentes tipos de ocorrência  relacionadas a "stack overflow", a ocorrência de erro  fatal AdvPL "stack overflow in function ....", disparada quando o limite de níveis de pilha foi atingido, foi alterada para  "stack depth overflow in function ...".
  • Proteção realizada em conformidade com o processo de melhoria contínua da ferramenta.

 

 

 

 

  • Sem rótulos