virtual: send voutput commit buffer to client
[platform/core/uifw/libtdm.git] / src / tdm_output.c
index 0185615..66ad21b 100644 (file)
@@ -1220,12 +1220,14 @@ _tdm_output_commit_virtual(tdm_output *output, int sync, tdm_output_commit_handl
        tdm_private_output *private_output;
        tdm_private_output_commit_handler *output_commit_handler = NULL;
        tdm_private_layer *private_layer = NULL;
+       tdm_private_display *private_display;
        tbm_surface_h buffer;
        tdm_error ret = TDM_ERROR_NONE;
 
        TDM_RETURN_VAL_IF_FAIL(output != NULL, TDM_ERROR_INVALID_PARAMETER);
 
        private_output = (tdm_private_output*)output;
+       private_display = private_output->private_display;
 
        if (!LIST_IS_EMPTY(&private_output->output_commit_handler_list)) {
                /* support only 1 commit */
@@ -1252,14 +1254,16 @@ _tdm_output_commit_virtual(tdm_output *output, int sync, tdm_output_commit_handl
                if (private_layer) break;
        }
        TDM_GOTO_IF_FAIL(private_layer, commit_failed);
-       TDM_GOTO_IF_FAIL(private_layer->committed_buffer, commit_failed);
 
-       buffer = private_layer->committed_buffer->buffer;
+       buffer = private_layer->commiting_buffer;
+       TDM_GOTO_IF_FAIL(buffer != NULL, commit_failed);
 
+       _pthread_mutex_unlock(&private_display->lock);
        ret = tdm_output_send_buffer(private_output, buffer);
        TDM_GOTO_IF_FAIL(ret == TDM_ERROR_NONE, commit_failed);
        ret = tdm_output_commit_buffer(private_output);
        TDM_GOTO_IF_FAIL(ret == TDM_ERROR_NONE, commit_failed);
+       _pthread_mutex_lock(&private_display->lock);
 
        return ret;
 
@@ -1890,6 +1894,8 @@ tdm_output_commit_done(tdm_output *output, tbm_surface_h buffer)
                if (private_layer) break;
        }
 
+       private_layer->commiting_buffer = NULL;
+
        LIST_FOR_EACH_ENTRY(output_commit_handler, &private_output->output_commit_handler_list, link) {
                if (output_commit_handler) break;
        }