From 2763642766a754d4edc50f4fdd4478c2e3cf6d8d Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Sun, 7 Jan 2001 02:30:50 +0000 Subject: [PATCH] Added a deadlock case for the queue Original commit message from CVS: Added a deadlock case for the queue --- docs/random/queue | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 docs/random/queue diff --git a/docs/random/queue b/docs/random/queue new file mode 100644 index 0000000000..f7b5ab9750 --- /dev/null +++ b/docs/random/queue @@ -0,0 +1,38 @@ + thread 1 thread2 + + // the queue is empty + while (!queue->level_buffers) { + STATUS("queue: %s U released lock\n"); + GST_UNLOCK (queue); + + // thread1 is scheduled and puts a lot of buffers + // in the queue + + // thread1 has put the last buffer on the queue + // here. A signal is going to be emited + + tosignal = (queue->level_buffers >= 0); + queue->level_buffers++; + + /* we can unlock now */ + GST_UNLOCK (queue); + + if (tosignal) { + g_mutex_lock (queue->emptylock); + g_cond_signal (queue->emptycond); + g_mutex_unlock (queue->emptylock); + } + + g_mutex_lock (queue->emptylock); + // wait forever + g_cond_wait (queue->emptycond, queue->emptylock); + g_mutex_unlock (queue->emptylock); + GST_LOCK (queue); + } + + + // thread 1 will also wait forever because the + // queue is filled.... + + +