From a0970878ccbd2df8299e04d8462d32f87c667788 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Wed, 1 Aug 2012 08:41:53 +0000 Subject: [PATCH] emotion: prevent race condition during gstreamer module shutdown or file set. Patch by Sohyun Kim SVN revision: 74719 --- legacy/emotion/ChangeLog | 9 +++++++-- legacy/emotion/NEWS | 3 ++- .../emotion/src/modules/gstreamer/emotion_sink.c | 14 ++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/legacy/emotion/ChangeLog b/legacy/emotion/ChangeLog index 9329acf180..3d5d4586a9 100644 --- a/legacy/emotion/ChangeLog +++ b/legacy/emotion/ChangeLog @@ -29,6 +29,11 @@ 2012-07-03 Cedric Bail * Track pending object for proper shutdown. -2012-06-05 Sohyun Kim - * Add fimcconvert element to resize and convert color using fimc on device +2012-06-05 Sohyun Kim + + * Add fimcconvert element to resize and convert color using fimc on device. + +2012-08-01 Cedric Bail + + * Fix race condition in gstreamer render function. diff --git a/legacy/emotion/NEWS b/legacy/emotion/NEWS index fa32d20257..7778956e50 100644 --- a/legacy/emotion/NEWS +++ b/legacy/emotion/NEWS @@ -12,7 +12,8 @@ Additions: Fixes: - build out of tree. - - stride of all YUV video. + - stride of all YUV video + - fix race condition in gstreamer render function on shutdown and file set. Improvements: diff --git a/legacy/emotion/src/modules/gstreamer/emotion_sink.c b/legacy/emotion/src/modules/gstreamer/emotion_sink.c index 6cc617ba50..b9e2e748b5 100644 --- a/legacy/emotion/src/modules/gstreamer/emotion_sink.c +++ b/legacy/emotion/src/modules/gstreamer/emotion_sink.c @@ -498,6 +498,13 @@ evas_video_sink_samsung_main_render(void *data) buffer = send->frame; preroll = send->preroll; + /* frame after cleanup */ + if (!preroll && !send->ev->last_buffer) + { + priv = NULL; + goto exit_point; + } + if (!priv || !priv->o || priv->unlocked) goto exit_point; @@ -630,6 +637,13 @@ evas_video_sink_main_render(void *data) preroll = send->preroll; ev = send->ev; + /* frame after cleanup */ + if (!preroll && !ev->last_buffer) + { + priv = NULL; + goto exit_point; + } + if (!priv || !priv->o || priv->unlocked) goto exit_point;