Nikolay Sivov (@nsivov) commented about dlls/combase/roapi.c:
impl->option = option; impl->ref = 1;
- if (option == AGILEREFERENCE_DEFAULT)
- hr = IUnknown_QueryInterface(obj, &IID_IAgileObject, (void **)&unknown);
- if (SUCCEEDED(hr))
- {
impl->obj = obj;
impl->is_agile = TRUE;
- }
I would rather combine this with AGILEREFERENCE_DELAYEDMARSHAL block, using additional helper like "bool is_object_agile()". Right now you need to look twice to see why "unknown" is not released.