Introduced by the recent PR #96846.
There are two sync objects being used (s_defaultProviderSyncObject, s_providerTable) and a deadlock is possible since the ordering of these 2 locks can vary and both locks rerequested.
The repro is to call TypeDescriptor.GetProvider(Type) and TypeDescriptor.AddProvider(..., Type) on different threads.