Signed-off-by: Jean-Christophe DUBOIS <j...@tribudubois.net>
---
 src/core/layers.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/core/layers.c b/src/core/layers.c
index 9d1d993..1e86425 100644
--- a/src/core/layers.c
+++ b/src/core/layers.c
@@ -154,8 +154,10 @@ dfb_layer_core_initialize( CoreDFB            *core,
 
                if (size > 0) {
                     lshared->layer_data = SHCALLOC( pool, 1, size );
-                    if (!lshared->layer_data)
+                    if (!lshared->layer_data) {
+                         SHFREE(pool, lshared);
                          return D_OOSHM();
+                   }
                }
           }
 
@@ -170,6 +172,8 @@ dfb_layer_core_initialize( CoreDFB            *core,
           if (ret) {
                D_DERROR( ret, "DirectFB/Core/layers: "
                          "Failed to initialize layer %d!\n", lshared->layer_id 
);
+               SHFREE(pool, lshared->layer_data);
+               SHFREE(pool, lshared);
                return ret;
           }
 
@@ -177,8 +181,11 @@ dfb_layer_core_initialize( CoreDFB            *core,
                int n;
 
                lshared->sources = SHCALLOC( pool, 
lshared->description.sources, sizeof(CoreLayerSource) );
-               if (!lshared->sources)
+               if (!lshared->sources) {
+                    SHFREE(pool, lshared->layer_data);
+                    SHFREE(pool, lshared);
                     return D_OOSHM();
+               }
 
                for (n=0; n<lshared->description.sources; n++) {
                     CoreLayerSource *source = &lshared->sources[n];
@@ -190,6 +197,9 @@ dfb_layer_core_initialize( CoreDFB            *core,
                     if (ret) {
                          D_DERROR( ret, "DirectFB/Core/layers: Failed to 
initialize source %d "
                                    "of layer %d!\n", n, lshared->layer_id );
+                         SHFREE(pool, lshared->sources);
+                         SHFREE(pool, lshared->layer_data);
+                         SHFREE(pool, lshared);
                          return ret;
                     }
                }
-- 
1.9.1

_______________________________________________
directfb-dev mailing list
directfb-dev@directfb.org
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev

Reply via email to