Nikolay Sivov (@nsivov) commented about dlls/mf/clock.c:
{ LIST_FOR_EACH_ENTRY_SAFE(timer, timer2, &clock->timers, struct clock_timer, entry) {
list_remove(&timer->entry); hr = MFCreateAsyncResult(&timer->IUnknown_iface, &clock->timer_callback, NULL, &result);
IUnknown_Release(&timer->IUnknown_iface); if (SUCCEEDED(hr)) { MFPutWorkItemEx(MFASYNC_CALLBACK_QUEUE_TIMER, result);
I think it should be enough to list_init() it here, so that callback works correctly. Why do you think Release() is not needed here?