From 2ef44507d4f235ad31fa99cee62c4cb8af55eb48 Mon Sep 17 00:00:00 2001 From: David Reid Date: Sun, 22 Aug 2021 10:20:28 +1000 Subject: [PATCH] Try fixing a few issues with the lock-free queue. --- miniaudio.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/miniaudio.h b/miniaudio.h index d2ff102e..cd5f2dba 100644 --- a/miniaudio.h +++ b/miniaudio.h @@ -61603,7 +61603,7 @@ MA_API ma_result ma_resource_manager_job_queue_post(ma_resource_manager_job_queu /* The job is stored in memory so now we need to add it to our linked list. We only ever add items to the end of the list. */ for (;;) { tail = c89atomic_load_64(&pQueue->tail); - next = pQueue->pJobs[ma_resource_manager_job_extract_slot(tail)].next; + next = c89atomic_load_64(&pQueue->pJobs[ma_resource_manager_job_extract_slot(tail)].next); if (ma_resource_manager_job_toc_to_allocation(tail) == ma_resource_manager_job_toc_to_allocation(c89atomic_load_64(&pQueue->tail))) { if (ma_resource_manager_job_extract_slot(next) == 0xFFFF) { @@ -61661,17 +61661,17 @@ MA_API ma_result ma_resource_manager_job_queue_next(ma_resource_manager_job_queu for (;;) { head = c89atomic_load_64(&pQueue->head); tail = c89atomic_load_64(&pQueue->tail); - next = pQueue->pJobs[ma_resource_manager_job_extract_slot(head)].next; + next = c89atomic_load_64(&pQueue->pJobs[ma_resource_manager_job_extract_slot(head)].next); if (ma_resource_manager_job_toc_to_allocation(head) == ma_resource_manager_job_toc_to_allocation(c89atomic_load_64(&pQueue->head))) { if (ma_resource_manager_job_extract_slot(head) == ma_resource_manager_job_extract_slot(tail)) { if (ma_resource_manager_job_extract_slot(next) == 0xFFFF) { return MA_NO_DATA_AVAILABLE; } - ma_resource_manager_job_queue_cas(&pQueue->tail, tail, next); + ma_resource_manager_job_queue_cas(&pQueue->tail, tail, ma_resource_manager_job_extract_slot(next)); } else { *pJob = pQueue->pJobs[ma_resource_manager_job_extract_slot(next)]; - if (ma_resource_manager_job_queue_cas(&pQueue->head, head, next)) { + if (ma_resource_manager_job_queue_cas(&pQueue->head, head, ma_resource_manager_job_extract_slot(next))) { break; } }