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.