Use shared_ptr<hb_set_t> in one place See if valgrind is happy...
diff --git a/src/hb-map.hh b/src/hb-map.hh index 065ae17..d3bb49a 100644 --- a/src/hb-map.hh +++ b/src/hb-map.hh
@@ -198,7 +198,7 @@ return true; } - bool set (K key, const V& value) { return set_with_hash (key, hb_hash (key), value); } + bool set (K key, const V &value) { return set_with_hash (key, hb_hash (key), value); } bool set (K key, V&& value) { return set_with_hash (key, hb_hash (key), std::move (value)); } V get (K key) const
diff --git a/src/hb-ot-layout-gsubgpos.hh b/src/hb-ot-layout-gsubgpos.hh index fff5974..0482785 100644 --- a/src/hb-ot-layout-gsubgpos.hh +++ b/src/hb-ot-layout-gsubgpos.hh
@@ -111,12 +111,9 @@ if (!done_lookups_glyph_set->get (lookup_index)) { - hb_set_t* empty_set = hb_set_create (); + hb::shared_ptr<hb_set_t> empty_set {hb_set_create ()}; if (unlikely (!done_lookups_glyph_set->set (lookup_index, empty_set))) - { - hb_set_destroy (empty_set); return true; - } } hb_set_clear (done_lookups_glyph_set->get (lookup_index)); @@ -171,7 +168,7 @@ hb_closure_context_t (hb_face_t *face_, hb_set_t *glyphs_, hb_map_t *done_lookups_glyph_count_, - hb_hashmap_t<unsigned, hb_set_t *> *done_lookups_glyph_set_, + hb_hashmap_t<unsigned, hb::shared_ptr<hb_set_t>> *done_lookups_glyph_set_, unsigned int nesting_level_left_ = HB_MAX_NESTING_LEVEL) : face (face_), glyphs (glyphs_), @@ -195,7 +192,7 @@ private: hb_map_t *done_lookups_glyph_count; - hb_hashmap_t<unsigned, hb_set_t *> *done_lookups_glyph_set; + hb_hashmap_t<unsigned, hb::shared_ptr<hb_set_t>> *done_lookups_glyph_set; unsigned int lookup_count = 0; };
diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index 9a8070a..f5031be 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc
@@ -1501,15 +1501,12 @@ hb_set_t *glyphs /* OUT */) { hb_map_t done_lookups_glyph_count; - hb_hashmap_t<unsigned, hb_set_t *> done_lookups_glyph_set; + hb_hashmap_t<unsigned, hb::shared_ptr<hb_set_t>> done_lookups_glyph_set; OT::hb_closure_context_t c (face, glyphs, &done_lookups_glyph_count, &done_lookups_glyph_set); const OT::SubstLookup& l = face->table.GSUB->table->get_lookup (lookup_index); l.closure (&c, lookup_index); - - for (auto _ : done_lookups_glyph_set.iter ()) - hb_set_destroy (_.second); } /** @@ -1529,7 +1526,7 @@ hb_set_t *glyphs /* OUT */) { hb_map_t done_lookups_glyph_count; - hb_hashmap_t<unsigned, hb_set_t *> done_lookups_glyph_set; + hb_hashmap_t<unsigned, hb::shared_ptr<hb_set_t>> done_lookups_glyph_set; OT::hb_closure_context_t c (face, glyphs, &done_lookups_glyph_count, &done_lookups_glyph_set); const GSUB& gsub = *face->table.GSUB->table; @@ -1551,9 +1548,6 @@ } } while (iteration_count++ <= HB_CLOSURE_MAX_STAGES && glyphs_length != glyphs->get_population ()); - - for (auto _ : done_lookups_glyph_set.iter ()) - hb_set_destroy (_.second); } /*