Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 09bdee2d authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: vidc: Ensure buffers return to client before cleanup"

parents 79fec5a4 269c65cd
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -1858,12 +1858,33 @@ static void msm_vidc_cleanup_instance(struct msm_vidc_inst *inst)
{
	struct msm_vidc_buffer *temp, *dummy;
	struct getprop_buf *temp_prop, *dummy_prop;
	struct list_head *ptr, *next;
	enum vidc_ports ports[] = {OUTPUT_PORT, CAPTURE_PORT};
	int c = 0;

	if (!inst) {
		dprintk(VIDC_ERR, "%s: invalid params\n", __func__);
		return;
	}

	for (c = 0; c < ARRAY_SIZE(ports); ++c) {
		enum vidc_ports port = ports[c];

		mutex_lock(&inst->bufq[port].lock);
		list_for_each_safe(ptr, next,
				&inst->bufq[port].vb2_bufq.queued_list) {
			struct vb2_buffer *vb = container_of(ptr,
					struct vb2_buffer, queued_entry);
			if (vb->state == VB2_BUF_STATE_ACTIVE) {
				vb->planes[0].bytesused = 0;
				print_vb2_buffer(VIDC_ERR, "undequeud vb2",
					inst, vb);
				vb2_buffer_done(vb, VB2_BUF_STATE_ERROR);
			}
		}
		mutex_unlock(&inst->bufq[port].lock);
	}

	mutex_lock(&inst->registeredbufs.lock);
	list_for_each_entry_safe(temp, dummy, &inst->registeredbufs.list,
			list) {