diff options
author | Julien Moutte <julien@moutte.net> | 2006-01-22 17:24:02 +0000 |
---|---|---|
committer | Julien Moutte <julien@moutte.net> | 2006-01-22 17:24:02 +0000 |
commit | b4c1c1c61c22d7633fa1431d4e13e61be55ecc5c (patch) | |
tree | 7f6532ae227243a225aa5a0864dd5f467b0212ca /sys | |
parent | 4757506720b7428daa8a30ed582b86455fff97cb (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.c | 6 | ||||
-rw-r--r-- | sys/xvimage/xvimagesink.c | 6 |
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); |