[pool] Uses memset() instead of assigning Null()
authorBehdad Esfahbod <behdad@behdad.org>
Wed, 3 Apr 2019 05:41:06 +0000 (22:41 -0700)
committerBehdad Esfahbod <behdad@behdad.org>
Wed, 3 Apr 2019 05:41:06 +0000 (22:41 -0700)
Assignment is invalid on invalid object.

src/hb-pool.hh

index 7e49ad0..5f54d8c 100644 (file)
@@ -39,6 +39,7 @@ struct hb_pool_t
   ~hb_pool_t ()
   {
     next = nullptr;
+
     + hb_iter (chunks)
     | hb_apply ([] (chunk_t *_) { ::free (_); })
     ;
@@ -49,7 +50,7 @@ struct hb_pool_t
     if (unlikely (!next))
     {
       if (unlikely (!chunks.alloc (chunks.length + 1))) return nullptr;
-      chunk_t *chunk = (chunk_t *) malloc (sizeof (chunk_t));
+      chunk_t *chunk = (chunk_t *) calloc (1, sizeof (chunk_t));
       if (unlikely (!chunk)) return nullptr;
       chunks.push (chunk);
       next = chunk->thread ();
@@ -58,7 +59,7 @@ struct hb_pool_t
     T* obj = next;
     next = * ((T**) next);
 
-    *obj = Null (T);
+    memset (obj, 0, sizeof (T));
 
     return obj;
   }