commit 96a2b9f1674b511ed058b4a8628475f4e3701a5f
parent 5f38b94d5c6e299eb8b7a8d1543ca643defb1de8
Author: falkTX <falktx@gmail.com>
Date: Fri, 8 Jan 2016 22:28:03 +0000
Fix crash when switching master while using GetAudioOutSamples()
Diffstat:
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/src/Misc/Master.cpp b/src/Misc/Master.cpp
@@ -618,7 +618,7 @@ int msg_id=0;
/*
* Master audio out (the final sound)
*/
-void Master::AudioOut(float *outl, float *outr)
+bool Master::AudioOut(float *outl, float *outr)
{
//Danger Limits
if(memory->lowMemory(2,1024*1024))
@@ -645,7 +645,7 @@ void Master::AudioOut(float *outl, float *outr)
if (mastercb)
mastercb(mastercb_ptr, new_master);
bToU->write("/free", "sb", "Master", sizeof(Master*), &this_master);
- return;
+ return false;
}
//XXX yes, this is not realtime safe, but it is useful...
@@ -821,6 +821,8 @@ void Master::AudioOut(float *outl, float *outr)
//update the global frame timer
time++;
+
+ return true;
}
//TODO review the respective code from yoshimi for this
@@ -846,7 +848,9 @@ void Master::GetAudioOutSamples(size_t nsamples,
nsamples -= smps;
//generate samples
- AudioOut(bufl, bufr);
+ if (! AudioOut(bufl, bufr))
+ return;
+
off = 0;
out_off += smps;
smps = synth.buffersize;
diff --git a/src/Misc/Master.h b/src/Misc/Master.h
@@ -100,7 +100,7 @@ class Master
void vuUpdate(const float *outl, const float *outr);
/**Audio Output*/
- void AudioOut(float *outl, float *outr) REALTIME;
+ bool AudioOut(float *outl, float *outr) REALTIME;
/**Audio Output (for callback mode).
* This allows the program to be controled by an external program*/
void GetAudioOutSamples(size_t nsamples,