Introdução
Este artigo descreve um problema no qual umaexceção n ocorrer quando vários segmentos chamam a função de tempo de execução "atexit" C ao mesmo tempo no Windows Embedded Compact 7. Uma atualização está disponível para resolver esse problema. Antes de instalar essa atualização, todas as atualizações emitidas anteriormente para este produto devem ser instaladas.
Sintomas
Quando vários segmentos chamam a função de tempo de execução atexit C ao mesmo tempo no Windows Embedded Compact 7, pode ocorrer uma exceção. A exceção ocorre quando o código que chama a função atexit não é serializado ou quando a função atexit será inserida pelo compilador.
Causa
O problema ocorre porque a função de atexit de tempo de execução C não é thread-safe. Portanto, a tabela de memória que usa a função está corrompida.
Resolução
Informações de atualização de software
Uma atualização de software compatível está agora disponível na Microsoft como atualização Windows Embedded Compact 7 mensal (junho de 2017).
Observação: Este Windows Embedded Compact 7 atualização mensal está disponível para download no seguinte site da Microsoft Download Center:
Pré-requisitos:
Esta atualização é compatível somente se todas as atualizações emitidas anteriormente para esse produto também foram instaladas.
Requisitos de reinicialização:
Depois de aplicar essa atualização, você deve executar uma compilação limpa de toda a plataforma. Para fazer isso, use um dos seguintes métodos:
-
No menu Build , clique em Limpar soluçãoe, em seguida, clique em Build Solution.
-
No menu Build, clique em Solução de reconstrução.
Você não precisa reiniciar o computador após aplicar essa atualização de software.
Informações de substituição da atualização
Esta atualização não substitui outras atualizações.
Informações sobre o arquivo:
Como esta é uma versão de onda completa. Quase todos os binários são afetados por esta versão.
Os seguintes arquivos de origem são afetados por esta versão::
private\winceos\COREOS\core\corelibc\crtw32\startup\cexit.cpp
private\winceos\COREOS\core\corelibc\crtw32\startup\onexit.cMais informações
Em um ambiente com vários threads, tabelas de função de atexit podem estar corrompidas por outra chamada atexit devido a segurança do thread não. Isso pode levar à corrupção de memória e de exceções. A função atexit está sendo usada para registrar uma rotina que será executada quando o programa é encerrado ou descarrega um arquivo. dll. A falha na segurança de segmentos pode causar corrupção das tabelas de função exit e alteração desta rotina de saída.
Referências
Saiba mais sobre a terminologia usada pela Microsoft para descrever as atualizações de software.