diff options
-rw-r--r-- | src/xine-engine/events.c | 4 | ||||
-rw-r--r-- | src/xine-engine/xine.c | 16 |
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); } |