DC attributes are not deallocated when free_dc_attr is called on them but are instead queued for reassignment. If we don't make use of the designated allocator to allocate DC attributes, we essentially keep adding memory to the queue indefinitely and, at the same time, not allowing room for reassignment.
The above essentially leads to a leak which is quite noticeable in applications making use heavy use of gdiplus.
https://bugs.winehq.org/show_bug.cgi?id=53645
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/885
Changes since prior MR:
- Check if HWND is valid after sending `WM_GETOBJECT` and getting a 0 return value.
- Block on thread calling `UiaNodeFromHandle()` rather than the marshaling thread.
- Squash `IWineUiaNode::get_prop_val` commit into commit where it is actually used.
--
v3: uiautomationcore: Add tests for UiaNodeFromHandle.
uiautomationcore: Create UI Automation client thread.
https://gitlab.winehq.org/wine/wine/-/merge_requests/846