mirror of
https://github.com/libretro/opera-libretro.git
synced 2026-11-07 04:25:58 -10:00
dsp: fix threaded condition variable locking
This commit is contained in:
1 parent
4773346830
commit
8f5d03b100
3 files changed
+11
-11
No files matched your search
+3
-1
@@ -1,7 +1,9 @@
|
||||
#ifndef OPERA_LR_DSP_H_INCLUDED
|
||||
#define OPERA_LR_DSP_H_INCLUDED
|
||||
|
||||
void opera_lr_dsp_init(const int threaded);
|
||||
#include <stdbool.h>
|
||||
|
||||
void opera_lr_dsp_init(const bool threaded);
|
||||
void opera_lr_dsp_destroy(void);
|
||||
|
||||
void opera_lr_dsp_upload(void);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "libopera/opera_dsp.h"
|
||||
|
||||
#include "opera_lr_callbacks.h"
|
||||
#include "opera_lr_dsp.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
@@ -35,7 +36,7 @@ opera_lr_dsp_destroy(void)
|
||||
}
|
||||
|
||||
void
|
||||
opera_lr_dsp_init(const int threaded_)
|
||||
opera_lr_dsp_init(const bool threaded_)
|
||||
{
|
||||
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "libopera/opera_dsp.h"
|
||||
|
||||
#include "opera_lr_callbacks.h"
|
||||
#include "opera_lr_dsp.h"
|
||||
|
||||
#include "boolean.h"
|
||||
|
||||
@@ -24,7 +25,6 @@ static uint32_t g_DSP_BUF_PENDING = 0;
|
||||
static int32_t g_DSP_BUF[DSP_BUF_SIZE];
|
||||
|
||||
static scond_t *g_DSP_COND = NULL;
|
||||
static slock_t *g_DSP_COND_MUTEX = NULL;
|
||||
static sthread_t *g_DSP_THREAD = NULL;
|
||||
static bool g_DSP_THREAD_RUNNING = false;
|
||||
static slock_t *g_DSP_THREAD_MUTEX = NULL;
|
||||
@@ -46,14 +46,14 @@ dsp_thread_loop(void *handle_)
|
||||
while(running)
|
||||
{
|
||||
slock_lock(g_DSP_THREAD_MUTEX);
|
||||
running = g_DSP_THREAD_RUNNING;
|
||||
pending = g_DSP_BUF_PENDING;
|
||||
while(g_DSP_THREAD_RUNNING && (g_DSP_BUF_PENDING == 0))
|
||||
scond_wait(g_DSP_COND,g_DSP_THREAD_MUTEX);
|
||||
|
||||
running = g_DSP_THREAD_RUNNING;
|
||||
pending = g_DSP_BUF_PENDING;
|
||||
g_DSP_BUF_PENDING = 0;
|
||||
slock_unlock(g_DSP_THREAD_MUTEX);
|
||||
|
||||
if (running)
|
||||
scond_wait(g_DSP_COND, g_DSP_COND_MUTEX);
|
||||
|
||||
while (pending > 0)
|
||||
{
|
||||
sample = opera_dsp_loop();
|
||||
@@ -136,12 +136,10 @@ opera_lr_dsp_destroy(void)
|
||||
sthread_join(g_DSP_THREAD);
|
||||
|
||||
scond_free(g_DSP_COND);
|
||||
slock_free(g_DSP_COND_MUTEX);
|
||||
slock_free(g_DSP_THREAD_MUTEX);
|
||||
|
||||
g_DSP_THREAD = NULL;
|
||||
g_DSP_COND = NULL;
|
||||
g_DSP_COND_MUTEX = NULL;
|
||||
g_DSP_THREAD_MUTEX = NULL;
|
||||
g_DSP_THREADED = false;
|
||||
}
|
||||
@@ -161,7 +159,6 @@ opera_lr_dsp_init(const bool threaded_)
|
||||
if(g_DSP_THREADED)
|
||||
{
|
||||
g_DSP_COND = scond_new();
|
||||
g_DSP_COND_MUTEX = slock_new();
|
||||
g_DSP_THREAD_MUTEX = slock_new();
|
||||
g_DSP_THREAD_RUNNING = true;
|
||||
g_DSP_THREAD = sthread_create(dsp_thread_loop, NULL);
|
||||
|
||||
Reference in new issue
Block a user