fix the resource leak
[platform/core/uifw/libtdm.git] / src / tdm_layer.c
index 0885abb..488f498 100644 (file)
@@ -343,6 +343,7 @@ _tdm_layer_dump_buffer(tdm_layer *layer, tbm_surface_h buffer)
        tdm_private_layer *l = NULL;
        char *p = bufs;
        int *remain = &len;
+       int n;
 
        pipe = private_output->pipe;
        zpos = private_layer->caps.zpos;
@@ -354,7 +355,10 @@ _tdm_layer_dump_buffer(tdm_layer *layer, tbm_surface_h buffer)
                TDM_SNPRINTF(p, remain, "_%p", l->showing_buffer->buffer);
        }
 
-       snprintf(fname, sizeof(fname), "tdm_%d_lyr_%d%s", pipe, zpos, bufs);
+       n = snprintf(fname, sizeof(fname), "tdm_%d_lyr_%d%s", pipe, zpos, bufs);
+       if ((size_t)n >= sizeof(fname)) {
+               fname[sizeof(fname) - 1] = '\0';
+       }
 
        tbm_surface_internal_dump_buffer(buffer, fname);
        TDM_DBG("%s dump excute", fname);
@@ -998,7 +1002,14 @@ _tdm_layer_commit(tdm_layer *layer, tdm_layer_commit_handler func, void *user_da
                        _pthread_mutex_unlock(&private_display->lock);
                        ret = tdm_vblank_wait(private_output->vblank, 0, 0, 1, _tdm_layer_cb_wait_vblank, private_output);
                        _pthread_mutex_lock(&private_display->lock);
-                       TDM_GOTO_IF_FAIL(ret == TDM_ERROR_NONE, commit_failed);
+                       if (ret != TDM_ERROR_NONE) {
+                               if (TDM_OUTPUT_DPMS_VSYNC_IS_OFF(private_output->current_dpms_value)) {
+                                       /* dpms off : the allocated memory was free in tdm_output_commit_internal */
+                                       return ret;
+                               }
+                               goto commit_failed;
+
+                       }
                        private_output->layer_waiting_vblank = 1;
 
                        if (tdm_debug_module & TDM_DEBUG_COMMIT)