Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix a race condition in vmaf_thread_pool_wait. #894

Merged
merged 1 commit into from
Sep 20, 2021

Conversation

nbirkbeck
Copy link
Contributor

Fixes #893.

There may still be work in the queue but n_working=0 before the vmaf_thread_pool_runner loop fetches another job in the queue. When calling vmaf_thread_pool_wait (and not stopping), we will still want to drain the queue. So only exit the wait loop when n_working = 0 && head == nullptr

There may still be work in the queue but n_working=0 before the vmaf_thread_pool_runner loop fetches another job in the queue.  When calling vmaf_thread_pool_wait (and not stopping), we will still want to drain the queue. So only exit the wait loop when n_working = 0 && head == nullptr
@kylophone
Copy link
Collaborator

Thank you, I will review this afternoon. Did you happen to hit this bug?

@nbirkbeck
Copy link
Contributor Author

nbirkbeck commented Aug 11, 2021 via email

@@ -156,7 +156,8 @@ int vmaf_thread_pool_wait(VmafThreadPool *pool)
if (!pool) return -EINVAL;

pthread_mutex_lock(&(pool->queue.lock));
while((!pool->stop && pool->n_working) || (pool->stop && pool->n_threads))
while((!pool->stop && (pool->n_working || pool->queue.head)) ||
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just noting that it is probably logically sufficient to just check pool->queue.head, although I'll wait for someone closer to the code to comment.

(If there are other potential fixes, I can test in an environment where failures are likley)

@kylophone kylophone merged commit db7e336 into Netflix:master Sep 20, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Race condition in vmaf / vmafossexec (results in "problem generating pooled VMAF score")
2 participants