[set] Fix init/fini of set on the stack to call object init/fini
authorBehdad Esfahbod <behdad@behdad.org>
Wed, 2 May 2018 16:56:21 +0000 (12:56 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Wed, 2 May 2018 16:56:45 +0000 (12:56 -0400)
Part of https://github.com/harfbuzz/harfbuzz/issues/1017

src/hb-set-private.hh
src/hb-set.cc

index 4288b15..149b89e 100644 (file)
@@ -193,18 +193,28 @@ struct hb_set_t
   hb_vector_t<page_map_t, 8> page_map;
   hb_vector_t<page_t, 1> pages;
 
-  inline void init (void)
+  inline void init_shallow (void)
   {
     in_error = false;
     population = 0;
     page_map.init ();
     pages.init ();
   }
-  inline void fini (void)
+  inline void init (void)
+  {
+    hb_object_init (this);
+    init_shallow ();
+  }
+  inline void fini_shallow (void)
   {
     page_map.fini ();
     pages.fini ();
   }
+  inline void fini (void)
+  {
+    hb_object_fini (this);
+    fini_shallow ();
+  }
 
   inline bool resize (unsigned int count)
   {
index d5163c7..2bad188 100644 (file)
@@ -45,7 +45,7 @@ hb_set_create (void)
   if (!(set = hb_object_create<hb_set_t> ()))
     return hb_set_get_empty ();
 
-  set->init ();
+  set->init_shallow ();
 
   return set;
 }
@@ -96,7 +96,7 @@ hb_set_destroy (hb_set_t *set)
 {
   if (!hb_object_destroy (set)) return;
 
-  set->fini ();
+  set->fini_shallow ();
 
   free (set);
 }