From: Barak Itkin Date: Sun, 27 May 2012 18:10:39 +0000 (+0300) Subject: Fix a memory leak in the P2trCDT constructor X-Git-Tag: p2tc-0.1.0~54 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fa6e668496146ebb94471e8d3c8cfef37baca1f9;p=poly2tri-c Fix a memory leak in the P2trCDT constructor --- diff --git a/refine/cdt.c b/refine/cdt.c index e0da6f2..2ca9d82 100644 --- a/refine/cdt.c +++ b/refine/cdt.c @@ -55,6 +55,8 @@ p2tr_cdt_new (P2tCDT *cdt) P2tTrianglePtrArray cdt_tris = p2t_cdt_get_triangles (cdt); GHashTable *point_map = g_hash_table_new (g_direct_hash, g_direct_equal); P2trCDT *rmesh = g_slice_new (P2trCDT); + GHashTableIter iter; + P2trPoint *pt_iter = NULL; gint i, j; @@ -129,6 +131,10 @@ p2tr_cdt_new (P2tCDT *cdt) p2tr_triangle_unref (new_tri); } + /* Now finally unref the points we added into the map */ + g_hash_table_iter_init (&iter, point_map); + while (g_hash_table_iter_next (&iter, NULL, (gpointer*)&pt_iter)) + p2tr_point_unref (pt_iter); g_hash_table_destroy (point_map); return rmesh; diff --git a/refine/mesh.c b/refine/mesh.c index 9e951cd..248290f 100644 --- a/refine/mesh.c +++ b/refine/mesh.c @@ -23,7 +23,15 @@ P2trPoint* p2tr_mesh_new_point (P2trMesh *self, const P2trVector2 *c) { - P2trPoint *pt = p2tr_point_new (c); + return p2tr_mesh_new_point2 (self, c->x, c->y); +} + +P2trPoint* +p2tr_mesh_new_point2 (P2trMesh *self, + gdouble x, + gdouble y) +{ + P2trPoint *pt = p2tr_point_new2 (x, y); pt->mesh = self; p2tr_mesh_ref (self); @@ -34,17 +42,6 @@ p2tr_mesh_new_point (P2trMesh *self, return pt; } -P2trPoint* -p2tr_mesh_new_point2 (P2trMesh *self, - gdouble x, - gdouble y) -{ - P2trVector2 c; - c.x = x; - c.y = y; - return p2tr_mesh_new_point (self, &c); -} - P2trEdge* p2tr_mesh_new_edge (P2trMesh *self, P2trPoint *start,