loop: release queue lock before calling invoke function

We don't actually need to hold the lock while calling the invoke
function, we only need the lock to protect the list of queues.
This commit is contained in:
Wim Taymans 2024-07-30 12:04:42 +02:00
parent 0d7c20760e
commit 25fbcae1b3

View file

@ -212,9 +212,12 @@ static void flush_all_queues(struct impl *impl)
* read index before we call the function because then the item * read index before we call the function because then the item
* might get overwritten. */ * might get overwritten. */
func = spa_steal_ptr(item->func); func = spa_steal_ptr(item->func);
if (func) if (func) {
pthread_mutex_unlock(&impl->queue_lock);
item->res = func(&impl->loop, true, item->seq, item->data, item->res = func(&impl->loop, true, item->seq, item->data,
item->size, item->user_data); item->size, item->user_data);
pthread_mutex_lock(&impl->queue_lock);
}
/* if this function did a recursive invoke, it now flushed the /* if this function did a recursive invoke, it now flushed the
* ringbuffer and we can exit */ * ringbuffer and we can exit */