            thread 1                                         thread2

                             				   // the queue is empty
                                                           while (!queue->level_buffers) {
                                                             STATUS("queue: %s U released lock\n");
                                                             GST_OBJECT_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_OBJECT_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_OBJECT_LOCK (queue);
                                                           }
							   

  // thread 1 will also wait forever because the
  // queue is filled....



