summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/xine-engine/events.c4
-rw-r--r--src/xine-engine/xine.c16
2 files changed, 13 insertions, 7 deletions
diff --git a/src/xine-engine/events.c b/src/xine-engine/events.c
index 04a599c50..a5680476f 100644
--- a/src/xine-engine/events.c
+++ b/src/xine-engine/events.c
@@ -111,6 +111,8 @@ xine_event_queue_t *xine_event_new_queue (xine_stream_t *stream) {
xine_event_queue_t *queue;
+ _x_refcounter_inc(stream->refcounter);
+
queue = malloc (sizeof (xine_event_queue_t));
pthread_mutex_init (&queue->lock, NULL);
@@ -186,6 +188,8 @@ void xine_event_dispose_queue (xine_event_queue_t *queue) {
free (queue->listener_thread);
}
+ _x_refcounter_dec(stream->refcounter);
+
/*
* clean up pending events
*/
diff --git a/src/xine-engine/xine.c b/src/xine-engine/xine.c
index fad1785b4..78d144b1f 100644
--- a/src/xine-engine/xine.c
+++ b/src/xine-engine/xine.c
@@ -1474,6 +1474,14 @@ static void xine_dispose_internal (xine_stream_t *stream) {
xine_list_iterator_t *ite;
lprintf("stream: %p\n", stream);
+
+ pthread_mutex_lock(&stream->xine->streams_lock);
+ ite = xine_list_find(stream->xine->streams, stream);
+ if (ite) {
+ xine_list_remove(stream->xine->streams, ite);
+ }
+ pthread_mutex_unlock(&stream->xine->streams_lock);
+
pthread_mutex_destroy (&stream->info_mutex);
pthread_mutex_destroy (&stream->meta_mutex);
pthread_mutex_destroy (&stream->frontend_lock);
@@ -1491,13 +1499,6 @@ static void xine_dispose_internal (xine_stream_t *stream) {
xine_list_delete(stream->event_queues);
- pthread_mutex_lock(&stream->xine->streams_lock);
- ite = xine_list_find(stream->xine->streams, stream);
- if (ite) {
- xine_list_remove(stream->xine->streams, ite);
- }
- pthread_mutex_unlock(&stream->xine->streams_lock);
-
_x_refcounter_dispose(stream->refcounter);
free (stream->current_extra_info);
@@ -1535,6 +1536,7 @@ void xine_dispose (xine_stream_t *stream) {
if (stream->osd_renderer)
stream->osd_renderer->close( stream->osd_renderer );
+ /* Remove the reference that the stream was created with. */
_x_refcounter_dec(stream->refcounter);
}