I don't think you need SAFE iterators for Get/Set.
- EnterCriticalSection(&object->lock);
- if (!list_empty(&object->attributes))
- {
struct mfattribute *attribute, *attribute2;
LIST_FOR_EACH_ENTRY_SAFE(attribute, attribute2, &object->attributes, struct mfattribute, entry)
{
PropVariantClear(&attribute->value);
list_remove(&attribute->entry);
heap_free(attribute);
}
- }
- LeaveCriticalSection(&object->lock);
- object->lock.DebugInfo->Spare[0] = 0;
- DeleteCriticalSection(&object->lock);
Empty list check is redundant.