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.
(You do have a
lock hierarchy in your DLL, right?)
The loader lock ...