On Sun, 10 Feb 2019 at 02:16, Nikolay Sivov nsivov@codeweavers.com wrote:
+static ULONG STDMETHODCALLTYPE d2d_geometry_group_Release(ID2D1GeometryGroup *iface) +{
- struct d2d_geometry *geometry = impl_from_ID2D1GeometryGroup(iface);
- ULONG refcount = InterlockedDecrement(&geometry->refcount);
- unsigned int i;
- TRACE("%p decreasing refcount to %u.\n", iface, refcount);
- if (!refcount)
- {
for (i = 0; i < geometry->u.group.geometry_count; ++i)
ID2D1Geometry_Release(geometry->u.group.src_geometries[i]);
d2d_geometry_cleanup(geometry);
heap_free(geometry);
- }
This leaks "src_geometries".
+HRESULT d2d_geometry_group_init(struct d2d_geometry *geometry, ID2D1Factory *factory,
D2D1_FILL_MODE fill_mode, ID2D1Geometry **geometries, unsigned int geometry_count)
+{
- unsigned int i;
- d2d_geometry_init(geometry, factory, &identity, (ID2D1GeometryVtbl *)&d2d_geometry_group_vtbl);
- if (!(geometry->u.group.src_geometries = heap_alloc(geometry_count * sizeof(*geometries))))
I'd feel a little better if this used heap_calloc().