From 2eb2828f6f3eeefdc025986b0fce6418254ea3be Mon Sep 17 00:00:00 2001 From: Vito Caputo Date: Tue, 23 Jun 2020 18:00:38 -0700 Subject: cache_audio: more unfucking of synchronization leaving the libjack related fixes for later --- recordmydesktop/src/rmd_cache_audio.c | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/recordmydesktop/src/rmd_cache_audio.c b/recordmydesktop/src/rmd_cache_audio.c index 71c9611..e3743be 100644 --- a/recordmydesktop/src/rmd_cache_audio.c +++ b/recordmydesktop/src/rmd_cache_audio.c @@ -60,29 +60,24 @@ void *rmdCacheSoundBuffer(ProgData *pdata) { while (pdata->running) { SndBuffer *buff = NULL; - if (pdata->paused) { - pthread_mutex_lock(&pdata->pause_mutex); + pthread_mutex_lock(&pdata->pause_mutex); + while (pdata->paused) pthread_cond_wait(&pdata->pause_cond, &pdata->pause_mutex); - pthread_mutex_unlock(&pdata->pause_mutex); - } + pthread_mutex_unlock(&pdata->pause_mutex); if (!pdata->args.use_jack) { - if (pdata->sound_buffer == NULL) { - pdata->v_enc_thread_waiting = 1; - pthread_mutex_lock(&pdata->snd_buff_ready_mutex); - pthread_cond_wait(&pdata->sound_data_read, &pdata->snd_buff_ready_mutex); - pthread_mutex_unlock(&pdata->snd_buff_ready_mutex); - pdata->v_enc_thread_waiting = 0; - } - - if (pdata->sound_buffer == NULL || !pdata->running) - break; - pthread_mutex_lock(&pdata->sound_buffer_mutex); + while (!pdata->sound_buffer && pdata->running) + pthread_cond_wait(&pdata->sound_data_read, &pdata->sound_buffer_mutex); + buff = pdata->sound_buffer; - //advance the list - pdata->sound_buffer = pdata->sound_buffer->next; + if (buff) + pdata->sound_buffer = pdata->sound_buffer->next; pthread_mutex_unlock(&pdata->sound_buffer_mutex); + + if (!pdata->running) + break; + fwrite(buff->data, 1, write_size, pdata->cache_data->afp); free(buff->data); free(buff); -- cgit v1.2.1