loop: don't call the hooks around blocking wait

The blocking invoke function is not meant to be called with any of the
loop context locks acquired so that it can actually run the invoke call
while blocking. Make this (and other blocking risks) clear in the
documentation.

Because it is not supposed to be called with any of the locks, we should
also not try to call the hooks (that implement the unlock/lock).

Fixes #4472
This commit is contained in:
Wim Taymans 2025-06-10 11:57:38 +02:00
parent 68d0cd2fbb
commit 09fafdfc01
2 changed files with 5 additions and 6 deletions

View file

@ -365,14 +365,10 @@ retry:
if (block && queue->ack_fd != -1) {
uint64_t count = 1;
spa_loop_control_hook_before(&impl->hooks_list);
if ((res = spa_system_eventfd_read(impl->system, queue->ack_fd, &count)) < 0)
spa_log_warn(impl->log, "%p: failed to read event fd:%d: %s",
queue, queue->ack_fd, spa_strerror(res));
spa_loop_control_hook_after(&impl->hooks_list);
res = item->res;
}
else {