X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Ftdm_pp.c;h=ad6f8a52c1b843393416b1c1dfa29be49e9d21c4;hb=152309540993deec16594de71fa7bac777d29e67;hp=8f4386028ffdcf03889c4f48327f1ede91640fb9;hpb=a95dc0ec22ee09e86f1164b1c861087007dadb85;p=platform%2Fcore%2Fuifw%2Flibtdm.git diff --git a/src/tdm_pp.c b/src/tdm_pp.c index 8f43860..ad6f8a5 100644 --- a/src/tdm_pp.c +++ b/src/tdm_pp.c @@ -51,6 +51,43 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. private_display = private_pp->private_display; \ func_pp = &private_display->func_pp +static tdm_error +_tdm_pp_check_if_exist(tdm_private_pp *private_pp, + tbm_surface_h src, tbm_surface_h dst) +{ + tdm_buffer_info *buf_info = NULL; + + LIST_FOR_EACH_ENTRY(buf_info, &private_pp->src_buffer_list, link) { + if (buf_info->buffer == src) { + TDM_ERR("%p attached twice", src); + return TDM_ERROR_BAD_REQUEST; + } + } + + LIST_FOR_EACH_ENTRY(buf_info, &private_pp->src_pending_buffer_list, link) { + if (buf_info->buffer == src) { + TDM_ERR("%p attached twice", src); + return TDM_ERROR_BAD_REQUEST; + } + } + + LIST_FOR_EACH_ENTRY(buf_info, &private_pp->dst_buffer_list, link) { + if (buf_info->buffer == dst) { + TDM_ERR("%p attached twice", dst); + return TDM_ERROR_BAD_REQUEST; + } + } + + LIST_FOR_EACH_ENTRY(buf_info, &private_pp->dst_pending_buffer_list, link) { + if (buf_info->buffer == dst) { + TDM_ERR("%p attached twice", dst); + return TDM_ERROR_BAD_REQUEST; + } + } + + return TDM_ERROR_NONE; +} + static void _tdm_pp_cb_done(tdm_pp *pp_backend, tbm_surface_h src, tbm_surface_h dst, void *user_data) @@ -269,6 +306,12 @@ tdm_pp_attach(tdm_pp *pp, tbm_surface_h src, tbm_surface_h dst) return TDM_ERROR_NONE; } + ret = _tdm_pp_check_if_exist(private_pp, src, dst); + if (ret != TDM_ERROR_NONE) { + pthread_mutex_unlock(&private_display->lock); + return ret; + } + ret = func_pp->pp_attach(private_pp->pp_backend, src, dst); TDM_WARNING_IF_FAIL(ret == TDM_ERROR_NONE);