aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartijn van Beurden <mvanb1@gmail.com>2023-07-25 11:03:23 +0200
committerMartijn van Beurden <mvanb1@gmail.com>2023-09-22 21:10:15 +0200
commitbcc37540aa8a627cf8b26cffb73040b19b9fff27 (patch)
tree1ccd27cb2fe6e4c1199e60859758cafb357a8cdb
parentc4cddca3351ea96c9b426c5c1cbcdfdae04223f1 (diff)
downloadflac-bcc37540aa8a627cf8b26cffb73040b19b9fff27.tar.gz
Fix threads busy waiting for MD5
-rw-r--r--src/libFLAC/stream_encoder.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/libFLAC/stream_encoder.c b/src/libFLAC/stream_encoder.c
index 0f39c3fe..025dc18e 100644
--- a/src/libFLAC/stream_encoder.c
+++ b/src/libFLAC/stream_encoder.c
@@ -3557,6 +3557,7 @@ void * process_frame_thread_(void * args) {
pthread_cond_wait(&encoder->private_->cond_work_available, &encoder->private_->mutex_work_queue);
}
if(encoder->private_->md5_work_available && pthread_mutex_trylock(&encoder->private_->mutex_md5_active) == 0) {
+ encoder->private_->md5_work_available = false;
if(encoder->protected_->do_md5) {
uint32_t length = 0;
pthread_mutex_lock(&encoder->private_->mutex_md5_fifo);
@@ -3574,8 +3575,8 @@ void * process_frame_thread_(void * args) {
memmove(&encoder->private_->md5_fifo.data[channel][0], &encoder->private_->md5_fifo.data[channel][length], encoder->private_->md5_fifo.tail * sizeof(encoder->private_->md5_fifo.data[0][0]));
pthread_mutex_lock(&encoder->private_->mutex_work_queue);
pthread_cond_signal(&encoder->private_->cond_md5_emptied);
+ encoder->private_->md5_work_available = false;
}
- encoder->private_->md5_work_available = false;
pthread_mutex_unlock(&encoder->private_->mutex_work_queue);
pthread_mutex_unlock(&encoder->private_->mutex_md5_fifo);
pthread_mutex_unlock(&encoder->private_->mutex_md5_active);