/* * Document-method: push * call-seq: push(obj) * * Pushes +obj+ to the queue. * */ static VALUE rb_queue_push(VALUE self, VALUE value) { Queue *queue; Data_Get_Struct(self, Queue, queue); lock_mutex(&queue->mutex); while (queue->capacity && queue->values.size >= queue->capacity) { wait_condvar(&queue->space_available, &queue->mutex); } push_list(&queue->values, value); signal_condvar(&queue->value_available); unlock_mutex(&queue->mutex); return self; }