loaderLock MDA
The loaderLock Assistente de depuração gerenciada (MDA) detecta tentativas para executar código gerenciado em um thread que contém o bloquear de carregador do sistema operacional Microsoft Windows. Qualquer tal execução é ilegal, pois ele poderá resultar em travamentos e o uso de DLLs antes de ter sido inicializadas pelo carregador do sistema operacional.
Sintomas
A falha mais comuns ao executar o código dentro do bloquear do carregador do sistema operacional é que segmentos serão deadlock quando se tenta telefonar outras funções do Win32 que também requerem o bloquear de carregador.Exemplos de tais funções são LoadLibrary, GetProcAddress, FreeLibrary, e GetModuleHandle. O aplicativo não pode chamar diretamente essas funções; o common linguagem tempo de execução (CLR) pode chamar essas funções sistema autônomo resultado de uma telefonar de nível superior sistema autônomo Load ou a primeira telefonar para uma plataforma de invocar o método.
Os deadlocks também podem ocorrer se um thread está aguardando que outro thread iniciar ou terminar.Quando um thread inicia ou termina a execução, ele deve adquirir o bloquear do carregador do sistema operacional para entregar eventos às DLLs afetadas.
Finalmente, há casos em que chamadas para DLLs podem ocorrer antes que as DLLs foram inicializadas corretamente pelo carregador do sistema operacional.Ao contrário das falhas de deadlock, que podem ser diagnosticadas examinando as pilhas de todos os threads envolvidos no deadlock, é muito difícil diagnosticar o uso de DLLs não inicializados sem utilizar este MDA.
Causa
Misto assemblies C++ gerenciados/não gerenciados, criados para versões do .NET estrutura 1.0 ou 1.1 geralmente tentam executar código gerenciado dentro do bloquear de carregador, a menos que um cuidado especial foi tomado, por exemplo, vinculação com /NOENTRY. Para obter uma descrição detalhada desses problemas, consulte "Misto DLL carregando problema" na biblioteca MSDN.
Mistos gerenciado/não gerenciado C++ assemblies criados para o .NET estrutura versão 2.0 são menos suscetíveis a esses problemas, tendo o mesmo risco reduzido sistema autônomo aplicativos de uso de DLLs não gerenciadas que violam sistema autônomo regras do sistema operacional.Por exemplo, se um não-gerenciado DllMain chamadas de ponto de entrada CoCreateInstance Para obter um objeto gerenciado que foi exposto a COM, o resultado é uma tentativa de executar código gerenciado dentro do bloquear de carregador.
Resolução
Examine o rastreamento da pilha para o segmento que ativou este MDA.O thread está tentando chamar ilegalmente em código gerenciado, mantendo o bloquear do carregador do sistema operacional.Você provavelmente verá DllMain ou ponto de entrada equivalente na pilha. Regras do sistema operacional para o que pode ser legalmente feito de dentro de um ponto de entrada são bastante limitadas.Essas regras impedem qualquer execução gerenciada.
Efeito sobre o tempo de execução
Normalmente, vários threads dentro do processo serão deadlock.Um desses threads é provável que haja um thread responsável por executar uma coleta de lixo, para que esse deadlock possa ter um impacto significativo sobre o processo inteiro.Além disso, ela irá impedir que quaisquer operações adicionais requerem bloquear do carregador do sistema operacional, como o carregamento e descarregamento de assemblies ou DLLs e iniciando ou parando threads.
Em alguns casos incomuns, também é possível para problemas semelhantes para ser disparado em DLLs que são chamadas antes de ter sido inicializadas ou violações de acesso.
Saída
Este MDA relata que uma ilegal gerenciado tentativa de execução.Você precisa examinar a pilha do thread para determinar por que o bloquear de carregador está ocorrendo e como corrigir o problema.
Configuração
<mdaConfig>
<assistants>
<loaderLock/>
</assistants>
</mdaConfig>