summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorJulien Moutte <julien@moutte.net>2006-01-22 17:24:02 +0000
committerJulien Moutte <julien@moutte.net>2006-01-22 17:24:02 +0000
commitb4c1c1c61c22d7633fa1431d4e13e61be55ecc5c (patch)
tree7f6532ae227243a225aa5a0864dd5f467b0212ca /sys
parent4757506720b7428daa8a30ed582b86455fff97cb (diff)
sys/: Playbin keeps some ref to some frames. We might get a frame destroyed after changing state to
Original commit message from CVS: 2006-01-22 Julien MOUTTE <julien@moutte.net> * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_destroy): * sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_destroy), (gst_xvimagesink_buffer_alloc): Playbin keeps some ref to some frames. We might get a frame destroyed after changing state to NULL, adding a safety check on xcontext.
Diffstat (limited to 'sys')
-rw-r--r--sys/ximage/ximagesink.c6
-rw-r--r--sys/xvimage/xvimagesink.c6
2 files changed, 12 insertions, 0 deletions
diff --git a/sys/ximage/ximagesink.c b/sys/ximage/ximagesink.c
index 0e3b7790..f0be51c3 100644
--- a/sys/ximage/ximagesink.c
+++ b/sys/ximage/ximagesink.c
@@ -485,6 +485,11 @@ gst_ximagesink_ximage_destroy (GstXImageSink * ximagesink,
ximagesink->cur_image = NULL;
}
+ /* We might have some buffers destroyed after changing state to NULL */
+ if (!ximagesink->xcontext) {
+ goto beach;
+ }
+
g_mutex_lock (ximagesink->x_lock);
#ifdef HAVE_XSHM
@@ -511,6 +516,7 @@ gst_ximagesink_ximage_destroy (GstXImageSink * ximagesink,
g_mutex_unlock (ximagesink->x_lock);
+beach:
if (ximage->ximagesink) {
/* Release the ref to our sink */
ximage->ximagesink = NULL;
diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c
index 85d52ad7..b884849c 100644
--- a/sys/xvimage/xvimagesink.c
+++ b/sys/xvimage/xvimagesink.c
@@ -223,6 +223,11 @@ gst_xvimage_buffer_destroy (GstXvImageBuffer * xvimage)
if (xvimagesink->cur_image == xvimage)
xvimagesink->cur_image = NULL;
+ /* We might have some buffers destroyed after changing state to NULL */
+ if (xvimagesink->xcontext) {
+ goto beach;
+ }
+
g_mutex_lock (xvimagesink->x_lock);
#ifdef HAVE_XSHM
@@ -251,6 +256,7 @@ gst_xvimage_buffer_destroy (GstXvImageBuffer * xvimage)
g_mutex_unlock (xvimagesink->x_lock);
+beach:
xvimage->xvimagesink = NULL;
gst_object_unref (xvimagesink);