X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Ftdm_thread.c;h=f71f3a17f210454d8fed919e968312a43be18339;hb=4c2922415c5f22cf3a3eda71a792405606be6f42;hp=8f624e1d3bc7951f6f420abc513ede905e26ebc0;hpb=8f35b8bbce307ac6c3f0fb6cbdb9889823fcf59b;p=platform%2Fcore%2Fuifw%2Flibtdm.git diff --git a/src/tdm_thread.c b/src/tdm_thread.c index 8f624e1..f71f3a1 100644 --- a/src/tdm_thread.c +++ b/src/tdm_thread.c @@ -37,11 +37,7 @@ #include "config.h" #endif -#include - -#include "tdm.h" #include "tdm_private.h" -#include "tdm_list.h" static tdm_private_thread *keep_private_thread; @@ -249,7 +245,8 @@ tdm_thread_handle_cb(tdm_private_loop *private_loop) tdm_private_thread *private_thread; tdm_thread_cb_base *base; char buffer[1024]; - unsigned int len, i; + unsigned int i; + int len; /* DON'T check TDM_MUTEX_IS_LOCKED here */ @@ -259,16 +256,23 @@ tdm_thread_handle_cb(tdm_private_loop *private_loop) private_thread = private_loop->private_thread; private_display = private_loop->dpy; - len = read(private_thread->pipe[0], buffer, sizeof buffer); + do { + len = read(private_thread->pipe[0], buffer, sizeof buffer); + } while (len < 0 && errno == EINTR); if (tdm_debug_module & TDM_DEBUG_THREAD) TDM_INFO("fd(%d) read length(%d)", private_thread->pipe[0], len); + if (len < 0) { + TDM_ERR("read failed: errno(%d), len(%d) %m", errno, len); + return TDM_ERROR_OPERATION_FAILED; + } + if (len == 0) return TDM_ERROR_NONE; if (len < sizeof * base) { - TDM_NEVER_GET_HERE(); + TDM_ERR("read failed: len(%d)", len); return TDM_ERROR_OPERATION_FAILED; } @@ -307,6 +311,7 @@ tdm_thread_handle_cb(tdm_private_loop *private_loop) break; } case TDM_THREAD_CB_OUTPUT_STATUS: { + /* LCOV_EXCL_START */ tdm_thread_cb_output_status *output_status = (tdm_thread_cb_output_status*)base; tdm_output *output_backend = tdm_display_find_output_stamp(private_loop->dpy, output_status->output_stamp); @@ -317,8 +322,10 @@ tdm_thread_handle_cb(tdm_private_loop *private_loop) tdm_output_cb_status(output_backend, output_status->status, output_status->user_data); break; + /* LCOV_EXCL_STOP */ } case TDM_THREAD_CB_OUTPUT_DPMS: { + /* LCOV_EXCL_START */ tdm_thread_cb_output_dpms *output_dpms = (tdm_thread_cb_output_dpms*)base; tdm_output *output_backend = tdm_display_find_output_stamp(private_loop->dpy, output_dpms->output_stamp); @@ -328,6 +335,7 @@ tdm_thread_handle_cb(tdm_private_loop *private_loop) } tdm_output_cb_dpms(output_backend, output_dpms->dpms, output_dpms->user_data); break; + /* LCOV_EXCL_STOP */ } case TDM_THREAD_CB_PP_DONE: { tdm_thread_cb_pp_done *pp_done = (tdm_thread_cb_pp_done*)base; @@ -356,6 +364,11 @@ tdm_thread_handle_cb(tdm_private_loop *private_loop) tdm_vblank_cb_vblank_SW(NULL, vblank_sw->vblank_stamp); break; } + case TDM_THREAD_CB_VBLANK_CREATE: { + tdm_thread_cb_vblank_create *vblank_create = (tdm_thread_cb_vblank_create*)base; + tdm_vblank_cb_vblank_create(NULL, vblank_create->vblank_stamp); + break; + } case TDM_THREAD_CB_NEED_VALIDATE: { tdm_thread_cb_need_validate *ev = (tdm_thread_cb_need_validate*)base; tdm_output_cb_need_validate(ev->o);