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.... + + +