what is a loader lock?

后端 未结 1 1343
轻奢々
轻奢々 2020-12-05 22:07

I was dealing with threads and have a potential deadlock problem. Someone mentioned to me about a loader lock.

I couldn\'t find much information online. Can someone

相关标签:
1条回答
  • 2020-12-05 22:42

    For example, review this question:

    Loader lock error

    The general idea of loader lock: The system runs the code in DllMain inside a lock (as in - synchronization lock). Therefore, running non-trivial code inside DllMain is "asking for a deadlock"

    Answer I've mentioned is based on this article:

    Another reason not to do anything scary in your DllMain: Inadvertent deadlock

    Your DllMain function runs inside the loader lock, one of the few times the OS lets you run code while one of its internal locks is held. This means that you must be extra careful not to violate a lock hierarchy in your DllMain; otherwise, you are asking for a deadlock.

    The loader lock is taken by any function that needs to access the list of DLLs loaded into the process. This includes functions like GetModuleHandle and GetModuleFileName. If your DllMain enters a critical section or waits on a synchronization object, and that critical section or synchronization object is owned by some code that is in turn waiting for the loader lock, you just created a deadlock:

    // global variable
    CRITICAL_SECTION g_csGlobal;
    
    // some code somewhere
    EnterCriticalSection(&g_csGlobal);
    ... GetModuleFileName(MyInstance, ..);
    LeaveCriticalSection(&g_csGlobal);
    
    BOOL WINAPI
    DllMain(HINSTANCE hinstDLL, DWORD fdwReason,
            LPVOID lpvReserved)
    {
      switch (fdwReason) {
      ...
      case DLL_THREAD_DETACH:
       EnterCriticalSection(&g_csGlobal);
       ...
      }
      ...
    }
    

    Please review the whole article for full understanding.

    0 讨论(0)
提交回复
热议问题