eina: handle errors when creating a mempool
authorJean Guyomarc'h <jean@guyomarch.bzh>
Sat, 16 Sep 2017 12:17:25 +0000 (14:17 +0200)
committerJean Guyomarc'h <jean@guyomarch.bzh>
Sat, 16 Sep 2017 12:28:39 +0000 (14:28 +0200)
If the backend initialization failed, the mempool would still be
successfully created. The mempool is now destroyed on failure.

src/lib/eina/eina_mempool.c

index b72dadb..a6d0d18 100644 (file)
@@ -65,8 +65,8 @@ _new_va(const char *name,
         const char *options,
         va_list args)
 {
-   Eina_Mempool_Backend *be = NULL;
-   Eina_Mempool *mp;
+   Eina_Mempool_Backend *be;
+   Eina_Mempool *mp = NULL;
 
    if (getenv("EINA_MEMPOOL_PASS"))
      {
@@ -100,9 +100,13 @@ _new_va(const char *name,
      }
 
    mp->backend_data = mp->backend.init(context, options, args);
+   if (EINA_UNLIKELY(! mp->backend_data)) goto clean_mp;
    return mp;
 
+clean_mp:
+   free(mp->backend2);
 on_error:
+   free(mp);
    return NULL;
 }