static void data_buffer_stream_read_idle(void *user_data) { rig_pb_stream_t *stream = user_data; int i; rut_poll_shell_remove_idle_FIXME(stream->shell, stream->buffer.read_idle); stream->buffer.read_idle = NULL; c_return_if_fail(stream->type == STREAM_TYPE_BUFFER); c_return_if_fail(stream->buffer.other_end != NULL); c_return_if_fail(stream->buffer.other_end->type == STREAM_TYPE_BUFFER); c_return_if_fail(stream->read_callback != NULL); for (i = 0; i < stream->buffer.incoming_write_closures->len; i++) { rig_pb_stream_write_closure_t *closure = c_array_index(stream->buffer.incoming_write_closures, void *, i); stream->read_callback(stream, (uint8_t *)closure->buf.base, closure->buf.len, stream->read_data); /* Give the closure back so it can be freed */ c_array_append_val(stream->buffer.other_end->buffer.finished_write_closures, closure); } c_array_set_size(stream->buffer.incoming_write_closures, 0); drain_finished_write_closures(stream); }
static void drain_finished_write_closures(rig_pb_stream_t *stream) { int i; for (i = 0; i < stream->buffer.finished_write_closures->len; i++) { rig_pb_stream_write_closure_t *closure = c_array_index(stream->buffer.finished_write_closures, void *, i); if (closure->done_callback) closure->done_callback(closure); } c_array_set_size(stream->buffer.finished_write_closures, 0); }
cg_texture_unit_t * _cg_get_texture_unit(cg_device_t *dev, int index_) { if (dev->texture_units->len < (index_ + 1)) { int i; int prev_len = dev->texture_units->len; dev->texture_units = c_array_set_size(dev->texture_units, index_ + 1); for (i = prev_len; i <= index_; i++) { cg_texture_unit_t *unit = &c_array_index(dev->texture_units, cg_texture_unit_t, i); texture_unit_init(dev, unit, i); } } return &c_array_index(dev->texture_units, cg_texture_unit_t, index_); }