diff options
author | Vasiliy Ulyanov <v.ulyanov@samsung.com> | 2017-04-26 14:59:27 +0300 |
---|---|---|
committer | Jinhyung Jo <jinhyung.jo@samsung.com> | 2017-04-28 15:31:42 +0900 |
commit | d42c823b475eb407d99cb03d2b1be4f1573c23ca (patch) | |
tree | 7258bf4a95d98a439f639affa7e2f091cf4b19a0 | |
parent | 5f9e42c9ecf8ca21bde4804607de669cc5c8ed3d (diff) | |
download | emulator-yagl-accepted/tizen/3.0/ivi/20170510.222413.tar.gz emulator-yagl-accepted/tizen/3.0/ivi/20170510.222413.tar.bz2 emulator-yagl-accepted/tizen/3.0/ivi/20170510.222413.zip |
Ensure fence_dpy is setup for all threadssubmit/tizen_3.0_common/20170511.082856submit/tizen_3.0/20170428.084054accepted/tizen/3.0/wearable/20170510.222408accepted/tizen/3.0/tv/20170510.222403accepted/tizen/3.0/mobile/20170510.222359accepted/tizen/3.0/ivi/20170510.222413accepted/tizen/3.0/common/20170511.174316accepted/tizen_3.0_ivi
This is needed in order to be able to create fences in transport layer
and avoid race conditions when invoking yagl_host_* routines with return
values. Previously fence_dpy was assigned only in eglGetDisplay. Though
the app may make EGL calls from auxiliary threads which will have
fence_dpy uninitialized.
Change-Id: Ibe66030cb4a30d189750d1ab233164cfea60b339
Signed-off-by: Vasiliy Ulyanov <v.ulyanov@samsung.com>
-rw-r--r-- | EGL/yagl_display.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/EGL/yagl_display.c b/EGL/yagl_display.c index 60b8d02..1433c8a 100644 --- a/EGL/yagl_display.c +++ b/EGL/yagl_display.c @@ -131,6 +131,20 @@ struct yagl_display *yagl_display_get(EGLDisplay handle) if (dpy->host_dpy == host_dpy) { pthread_mutex_unlock(&g_displays_mutex); + /* + * We need to make sure fence_dpy is setup properly for current + * thread state. Otherwise we may not be able to create fences in + * transport layer and eventually will face a race condition between + * host and target. + * + * E.g. the app may initialize all EGL stuff (i.e. get display, + * choose config, etc.) and save it to some global state var. If + * then it tries to create new context in some other thread, + * fence_dpy will be NULL and as a result we may not get proper + * values returned from the host. + */ + yagl_set_fence_display(dpy); + return dpy; } } |