Giovanni Mascellani (@giomasce) commented about dlls/xactengine3_7/xact_dll.c:
+{ + struct wrapper_lookup *lookup; + UINT ret; + + lookup = HeapAlloc(GetProcessHeap(), 0, sizeof(*lookup)); + if (!lookup) + { + ERR("Failed to allocate wrapper_lookup!\n"); + return E_OUTOFMEMORY; + } + lookup->fact = fact; + lookup->xact = xact; + + EnterCriticalSection(&engine->wb_wrapper_lookup_cs); + ret = wine_rb_put(&engine->wb_wrapper_lookup, lookup->fact, &lookup->entry); + LeaveCriticalSection(&engine->wb_wrapper_lookup_cs); The `wb_` prefix can be removed. It standed for "WaveBank", but it's more sensible to use the same lock and RB tree for all object types as you are doing.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/536#note_5059